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