删除出现x次R的ID

我有一个df,我想删除在df中的行数less于X的人。 例如,在这个玩具的例子中,我想保留有5行以上的人。

df names fruit 4 john kiwi 7 john apple 9 john banana 13 john orange 14 john apple 2 mary orange 5 mary apple 8 mary orange 10 mary apple 12 mary apple 1 tom apple 3 tom banana 6 tom apple 11 tom kiwi 

示例输出

 df names fruit 4 john kiwi 7 john apple 9 john banana 13 john orange 14 john apple 2 mary orange 5 mary apple 8 mary orange 10 mary apple 12 mary apple 

提前致谢!

你可以像这样使用table

 df[df$names %in% names(table(df$names))[table(df$names) >= 5],] 

下面是一个使用内build的.N值的data.table解决scheme,如?data.table帮助文件中所述: '.N' is an integer, length 1, containing the number of rows in the group. ?data.table '.N' is an integer, length 1, containing the number of rows in the group.

 #create a similar reproducible exmaple library(data.table) dat <- data.table(names=rep(letters[1:3],c(5,5,3)),var=1:13) 

删除行:

 dat[, cnt:=.N, by=names][cnt >= 5] 

虽然我觉得必须有一种方法来做到这一点,而不是分配一个新的variables。 …现在感谢@mnel的评论:

 dat[,if(.N>=5).SD,by=names] 

如果组.N的行数大于或等于5,这基本上为by组的每个值返回一个子数据表.SD 。它与更传统的R子集化语法相当:

 dat[,.SD[.N >= 5],by=names]