我已经搜索了一段时间的这个问题的答案并没有找到这个确切的测试用例。如果在别处解决了,请接受我的道歉。使用dplyr对多个行和列匹配的数据框进行子集设置
我有一个来自政府调查计划的大型数据框data
生物观察(约2,500,000行,约50列)。重要的专栏是(调查的)reg
(地区),species
和year
。
我想将数据框的子集包含在每个区域只包含每年至少发现一次的物种。 (我也需要这样做,对于每年至少发现10次的物种,但我认为解决方案是相同的。)
换句话说,我只需要筛选出species
所在的行每年region
也存在 - 实质上,所有行unique(year)
每个species
匹配unique(year)
每个reg
。 (只有9个区域,所以我肯定可以将数据分为9个数据帧,并重复9次过滤,但我希望只有dplyr
更优雅的解决方案,我可以直接应用到data
。)
谢谢!
编辑:我创建了@aichao建议的模拟数据集。
> year = c(1999,2000,2000,2004,2004,2008)
> reg = c('ai','ci','ci','ai','ai','ci')
> species = c('blueei','greenei','yellowei','blueei','greenei','yellowei')
> df <- data.frame(year, reg, species)
> df
year reg species
1 1999 ai blueei
2 2000 ci greenei
3 2000 ci yellowei
4 2004 ai blueei
5 2004 ai greenei
6 2008 ci yellowei
所以在这种自由度,我想只保留所发现的每一个区域进行了调查时间物种(让我们假装这是一个完整的数据)。从ai
开始,我想保留blueei
- 这是在每个调查年份发现的 - 但不是greenei
。同样,在ci
,我想保持yellowei
但不greenei
,因为greenei
没有在2008年
请提交最小exampe用'dput(数据)'或数据帧 –
@Alexa的一个子集,欢迎来到SO。这将有助于脂肪酶回答你的问题,如果他们有你的数据样本 - http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Bulat