我试图按国家和立法选举对数据框进行排序 - 这一步可以复制多个不同的政党家庭。
到目前为止,我所做的是将主要数据集分类为聚会家庭(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)
但是,这没有结果,我不知道为什么!我可以坚持用手工完成这一切,但这很乏味且不易复制,这就是为什么我真的更喜欢这样的解决方案。任何帮助将不胜感激!
感谢您提供dput
输出。您立即出错的原因是您需要将included_elections
转换为日期格式:
included_elections <- as.Date(included_elections)
也就是说,一些更系统化的东西,包括你想要的条件(例如,当你想要最后一次选举和你想要倒数第二次时),沿着@ iod的方法,是一个更好的长期解决方案。
CMPdataset %>% group_by(country) %>%
filter(parfam==`10`, !country %in% nodata, date==max(edate), date>201000)
date==max(date)
将过滤数据框,以便在每个组(即国家)内,仅保留最新选举的行。 (此外,条件之间不需要&
,默认情况下它们都由&
加入)。