我有一个大数据框,并且如果基于此数据帧中某个列的给定组的行数少于给定数,我想删除所有行。 这是一个示例:
x=1:6; y=c("A","B","B","B","C","C")
df<- data.frame(x,y)
如果我按变量y分组,则我有三行属于“ B”组。在这里,我要删除所有不满足此条件的行(<3行)。 预期输出:
df
x y
1 2 B
2 3 B
3 4 B
有一种简单的方法吗?
答案 0 :(得分:7)
我们可以使用dplyr::filter()
,并使用dplyr::n()
library(dplyr)
df %>%
group_by(y) %>%
filter(n()>2)
答案 1 :(得分:4)
另一个选择是
library(data.table)
setDT(df)[, .SD[.N >2], by = y]
答案 2 :(得分:3)
使用基数R
t <- table(df$y)
df[df$y %in% names(t[t > 2]), ]
x y
2 2 B
3 3 B
4 4 B
答案 3 :(得分:2)
这是使用拆分,应用,合并方法的基本R解决方案:
do.call(rbind, lapply(split(df, df$y), function(i) if(nrow(i) >= 3) { i }))
答案 4 :(得分:2)
这里是一个base R
解决方案,它使用了ave()
res <-df[ave(seq(nrow(df)),df$y,FUN = length)>=3,]
您将得到
> res
x y
2 2 B
3 3 B
4 4 B