分组,计数并过滤掉与大于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的计数对应的条目[重复]的主要内容,如果未能解决你的问题,请参考以下文章