删除具有少于三个独特观察的组

Remove groups with less than three unique observations

我想对我的数据框进行子集化,以仅保留在不同日期有 3 个或更多观测值的组。我想摆脱少于 3 个观察值的组,或者他们的观察值不是来自 3 个不同的日子。

这是一个示例数据集:

Group   Day
1       1 
1       3
1       5
1       5
2       2
2       2  
2       4 
2       4
3       1
3       2
3       3
4       1
4       5

因此对于上面的示例,组 1 和组 3 将被保留,组 2 和组 4 将从数据框中删除。

我希望这是有道理的,我想解决方案会很简单,但我无法解决(我是 R 的新手,而且想出解决此类问题的速度不是很快)。我想也许 diff 函数可以派上用场,但没有得到更多。

使用 你可以做:

library(data.table)
DT[, if(uniqueN(Day) >= 3) .SD, by = Group]

给出:

   Group Day
1:     1   1
2:     1   3
3:     1   5
4:     1   5
5:     3   1
6:     3   2
7:     3   3

dplyr:

library(dplyr)
DT %>% 
  group_by(Group) %>% 
  filter(n_distinct(Day) >= 3)

结果相同。

一个想法使用 dplyr

 library(dplyr)
 df %>% 
   group_by(Group) %>% 
   filter(length(unique(Day)) >= 3)

#Source: local data frame [7 x 2]
#Groups: Group [2]

#  Group   Day
#  (int) (int)
#1     1     1
#2     1     3
#3     1     5
#4     1     5
#5     3     1
#6     3     2
#7     3     3

我们可以使用base R

i1 <-  rowSums(table(df1)!=0)>=3
subset(df1, Group %in% names(i1)[i1])
#    Group Day
#1      1   1
#2      1   3
#3      1   5
#4      1   5
#9      3   1
#10     3   2
#11     3   3

或者单行 base R 会是

df1[with(df1, as.logical(ave(Day, Group, FUN = function(x) length(unique(x)) >=3))),]