分组依据,取计数并过滤掉计数大于1的条目

hai*_*men 5 r dplyr

以下是我的数据,

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
Run Code Online (Sandbox Code Playgroud)

当我使用以下命令时,

data %>% groupby(date, number) %>% summarize(count = n())
Run Code Online (Sandbox Code Playgroud)

我得到以下信息,

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
Run Code Online (Sandbox Code Playgroud)

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

data

date             number     value
2016-05-07         3          9 
2016-05-08         4          10
2016-05-09         5          11
Run Code Online (Sandbox Code Playgroud)

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

akr*_*run 8

我们可以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
Run Code Online (Sandbox Code Playgroud)

只是为了提供一些替代方案 data.table

library(data.table)
setDT(data)[, if(.N == 1) .SD , .(date, number)]
Run Code Online (Sandbox Code Playgroud)

或与 base R

data[with(data, ave(number, number, date, FUN = length) ==1),]
Run Code Online (Sandbox Code Playgroud)