首页 > 解决方案 > 如何过滤多个条件

问题描述

我正在尝试按国家和立法选举对数据框进行排序——一步可复制到多个不同的政党家族。

到目前为止,我所做的是将主要数据集分类为政党家族(parfam == '10')、“最近”选举(日期 > '201000'),并排除没有相关数据的国家(!国家 %in% 无数据, 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 格式的特定选举日期,我列出了我在名称下包含的所有特定选举包括选举):

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

但是,这不会产生任何结果,我也不知道为什么!我可以坚持手工完成,但它非常乏味且不易复制,这就是为什么我更喜欢这样的解决方案。任何帮助将不胜感激!

标签: rdplyrfiltering

解决方案


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

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


推荐阅读