根据特定因素的计数过滤行

Jam*_*ite 1 r filter dataframe

我想知道如果我有一个名为“站点”的列名和另一个名为“年份”的列名,我将如何只选择至少 4 年的站点?我在其他地方看到过类似的问题(例如,如何根据类别计数过滤数据框),但我不知道如何根据另一列选择此类过滤器。示例数据集:

Site <- as.data.frame(as.factor(rep(c("Site.A","Site.B","Site.C"), each =4)))
Year <- as.data.frame(as.numeric(c(2010,2011,2012,2013,2010,2011,2012,2013,
                               2010,2010,2010,2010)))
Count <- as.data.frame(matrix(sample(0:10, 3*4, replace=TRUE), ncol=1))

df <- cbind(Site,Year,Count)
colnames(df) <- c("site","year","count")
Run Code Online (Sandbox Code Playgroud)

即站点 C 将从该数据集中删除,因为只有 1 年的数据。

Gop*_*ala 5

使用 library dplyr,你可以做这样的事情(注意你的数据有零这样的情况):

library(dplyr)

df %>% group_by(Site) %>% filter(n_distinct(Year) >= 4)
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想要数据中有五行的站点,您可以执行以下操作:

df %>% group_by(Site) %>% filter(n() >= 4)
Run Code Online (Sandbox Code Playgroud)

请注意,n_distinct()过滤器在海量数据集上可能会非常慢(已知错误dplyr)。如果遇到此问题,只需替换该部分,length(unique(Year))如下所示:

df %>% group_by(Site) %>% filter(length(unique(Year)) > = 4)
Run Code Online (Sandbox Code Playgroud)