我有一个数据帧,我想根据组条件从中提取一个子集:对于给定的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
时,它只返回分组列和汇总列