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 年的数据。
使用 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)