删除出现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]