如何删除 R 中包含少于 3 行数据的组?

How to delete groups containing less than 3 rows of data in R?

我在 R 中使用 dplyr 包,并按 3 个变量(年份、站点、育雏)对数据进行分组。

我想删除少于 3 行的组。例如,在下面的示例中,我想删除育雏“2”的行。我有很多数据可以用来做这件事,所以虽然我可以手工煞费苦心地做这件事,但使用 R 来自动化它会很有帮助。

Year Site Brood Parents
1996 A    1     1  
1996 A    1     1  
1996 A    1     0  
1996 A    1     0  
1996 A    2     1      
1996 A    2     0  
1996 A    3     1  
1996 A    3     1  
1996 A    3     1  
1996 A    3     0  
1996 A    3     1  

我希望这是有道理的,非常感谢您的帮助!我是 R 和 Whosebug 的新手,如果我表达这个问题的方式不是很好,我深表歉意!如果我需要提供任何其他信息,请告诉我。

一种方法是在 filter:

中使用神奇的 n() 函数
library(dplyr)

my_data <- data.frame(Year=1996, Site="A", Brood=c(1,1,2,2,2))

my_data %>% 
  group_by(Year, Site, Brood) %>% 
  filter(n() >= 3)

n() 函数给出当前组中的行数(如果没有分组,则为总行数)。

你也可以使用 base R:

temp <- read.csv(paste(folder,"test.csv", sep=""), head=TRUE, sep=",")
matches <- aggregate(Parents ~ Year + Site + Brood, temp, FUN="length")
temp <- merge(temp, matches, by=c("Year","Site","Brood"))
temp <- temp[temp$Parents.y >= 3, c(1,2,3,4)]

这里抛出data.table方法入党:

library(data.table)
setDT(my_data)
my_data[ , if (.N >= 3L) .SD, by = .(Year, Site, Brood)]