如何过滤多个条件

问题描述 投票:0回答:2

我试图按国家和立法选举对数据框进行排序 - 这一步可以复制多个不同的政党家庭。

到目前为止,我所做的是将主要数据集分类为聚会家庭(parfam =='10'),“最近”选举(日期>'201000'),并排除没有相关数据的国家(!%in%nodata, nodata是我已经创建的值列表:

eco <- filter(CMPdataset, parfam == '10' & date > '201000' & ! country %in% nodata)

由于一些国家在2010年后的时间段内将多个选举编入了总体数据集CMPdataset,我手动浏览了数据,并使用以下方法手动删除了所有不必要的数据:

eco <- eco[-c(1,8,10,11,13,14,18,20,21,22,23,27,28,31,32,34,35,37), ]

如您所见,对于较大的数据帧,这可能相当繁琐。所以我想我会把我知道的公式结合起来并提出以下内容(edate是一个变量,具有YYYY-MM-DD格式的特定选举日期,我列出了我在名称下包含的所有具体选举included_elections):

eco2 <- filter(CMPdataset, parfam == '10' & ! country %in% nodata & edate %in% included_elections)

但是,这没有结果,我不知道为什么!我可以坚持用手工完成这一切,但这很乏味且不易复制,这就是为什么我真的更喜欢这样的解决方案。任何帮助将不胜感激!

r dplyr filtering
2个回答
0
投票

感谢您提供dput输出。您立即出错的原因是您需要将included_elections转换为日期格式:

included_elections <- as.Date(included_elections)

也就是说,一些更系统化的东西,包括你想要的条件(例如,当你想要最后一次选举和你想要倒数第二次时),沿着@ iod的方法,是一个更好的长期解决方案。


0
投票
CMPdataset %>% group_by(country) %>% 
filter(parfam==`10`, !country %in% nodata, date==max(edate), date>201000)

date==max(date)将过滤数据框,以便在每个组(即国家)内,仅保留最新选举的行。 (此外,条件之间不需要&,默认情况下它们都由&加入)。

© www.soinside.com 2019 - 2024. All rights reserved.