r-如何在不丢失某些列的情况下,根据组条件从数据帧中删除行



我有一个数据帧,我想根据组条件从中提取一个子集:对于给定的x年,如果一个物种只计数1个个体,那么将其从df中删除。

我可以有这样一个子集:


df %>%
group_by(species,year) %>%
summarise(n_inds = n()) %>%
filter(n_inds > 1)

它给出了这个结果

# A tibble: 1,915 x 3
espece                     year n_inds
<fct>                     <dbl>  <int>
1 Agelaioides badius         2003      5
2 Agelaioides badius         2004      3
3 Agelaioides badius         2005      4
4 Amaurospiza moesta         2005      2
5 Amaurospiza moesta         2014      2
6 Amblyramphus holosericeus  2006      2
7 Ammodramus humeralis       2010      4
8 Ammodramus humeralis       2011      3
9 Anabacerthia amaurotis     2001      3
10 Anabacerthia amaurotis     2004      5
# ... with 1,905 more rows

但这并不完全是我想要的。这个df告诉我,例如,在第一行,它们是2003年Agelaioides badius的5个个体,我想保留在我的原始df中,以及每个对应鸟类的不同测量值的所有列(我正在研究鸟类(。

如果有人有解决方案!:(

非常感谢

PS:原始df统计了9个变量的19501个观测值。

我们不需要summarise步骤。相反,在filter中直接使用逻辑表达式

library(dplyr)
df %>%
group_by(species, year) %>%
filter(n() > 1)

如果我们需要创建"n_inds",则使用add_count

df %>%
add_count(species, year) %>%
filter(n > 1)

或者使用mutate创建列

df %>%
group_by(species, year) %>%
mutate(ninds = n()) %>%
ungroup %>%
filter(ninds > 1)

当我们使用summarise时,它只返回分组列和汇总列