筛选满足r中每组条件的行

时间:2019-12-13 16:17:03

标签: r dataframe dplyr tibble

我有一个大数据框,并且如果基于此数据帧中某个列的给定组的行数少于给定数,我想删除所有行。 这是一个示例:

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

有一种简单的方法吗?

5 个答案:

答案 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