分组,计数并过滤掉与大于1的计数对应的条目[重复]

Posted

技术标签:

【中文标题】分组,计数并过滤掉与大于1的计数对应的条目[重复]【英文标题】:Group by, take count and filter out entries corresponding to count greater than 1 [duplicate] 【发布时间】:2016-12-06 21:02:49 【问题描述】:

以下是我的数据,

data

date             number     value
2016-05-05         1          5
2016-05-05         1          6
2016-05-06         2          7
2016-05-06         2          8
2016-05-07         3          9 
2016-05-08         4          10
2016-05-09         5          11

当我使用以下命令时,

data %>% groupby(date, number) %>% summarize(count = n())

我得到以下信息,

date             number        count 
2016-05-05         1             2
2016-05-06         2             2
2016-05-07         3             1
2016-05-08         4             1
2016-05-09         5             1

现在我想过滤掉与大于1的计数对应的条目。我想删除计数大于1的组合条目。我的输出应该如下所示,

data

date             number     value
2016-05-07         3          9 
2016-05-08         4          10
2016-05-09         5          11

前四个条目,因为它的计数大于 1 ,已被过滤掉。有人可以帮我这样做吗?或者给出一些相关的想法?

【问题讨论】:

不,这两个问题都是关于过滤出现的。 @akrun 针对新的data[!data[, duplicated(.SD) | duplicated(.SD, fromLast=TRUE), .SDcols=date:number]] 重新关闭它似乎在这里工作正常。 【参考方案1】:

我们可以在按“日期”、“数字”分组后使用filter,并检查行数(n())是否等于1,并使用filter命令保留这些行。

library(dplyr)
data %>% 
     group_by(date, number) %>% 
     filter(n() ==1)
#        date number value
#        <chr>  <int> <int>
#1 2016-05-07      3     9
#2 2016-05-08      4    10
#3 2016-05-09      5    11

只是为了提供一些使用data.table的替代方法

library(data.table)
setDT(data)[, if(.N == 1) .SD , .(date, number)]

base R

data[with(data, ave(number, number, date, FUN = length) ==1),]

【讨论】:

以上是关于分组,计数并过滤掉与大于1的计数对应的条目[重复]的主要内容,如果未能解决你的问题,请参考以下文章

与分组的总和计数[重复]

MySQL查询仅返回具有计数的重复条目

根据给定日期的最大状态计数,并包含分组数据

MySQL 数据库在计数或求和和分组时失败 - 不是其他线程的重复

查询用于创建分组、聚合和过滤的行集的不同计数

php多维数组计数重复值并添加对应值