【发布时间】:2019-05-02 22:30:05
【问题描述】:
我正在尝试按国家和立法选举对数据框进行排序 - 一步即可复制到多个不同的政党家族。
到目前为止,我所做的是将主要数据集分类为政党家族(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,我列出了我在名称下包含的所有具体选举包括选举):
eco2 <- filter(CMPdataset, parfam == '10' & ! country %in% nodata & edate %in% included_elections)
但是,这没有结果,我也不知道为什么!我可以坚持手工完成,但它非常乏味且不易复制,这就是为什么我更喜欢这样的解决方案。任何帮助将不胜感激!
【问题讨论】:
-
你能展示一个小的可重复的例子和预期的输出基础吗
-
您能否至少提供
dput(head(CMPdataset$edate))和dput(head(included_elections))?日期的编码可能不同。 -
@Frank
> dput(head(CMPdataset$edate)) structure(c(-9237, -9237, -9237, -9237, -9237, -7774), class = "Date") > dput(head(included_elections2)) c("2014-09-14", "2013-09-09", "2011-09-15", "2011-04-17", "2013-04-27", "2010-06-13") -
您立即出错的原因是您需要将
included_elections转换为日期格式included_elections <- as.Date(included_elections)。但@iod 的方法是更好的长期解决方案。 -
@Frank 感谢您的提示,效果很好!看起来我不能接受作为“正确答案”的评论,虽然 :( iod 的方法会起作用,但在某些情况下,我需要倒数第二次选举,这就是为什么这种通用方法不幸没有的原因在我的具体情况下不起作用。