【问题标题】:How to filter multiple criteria如何过滤多个条件
【发布时间】: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 的方法会起作用,但在某些情况下,我需要倒数第二次选举,这就是为什么这种通用方法不幸没有的原因在我的具体情况下不起作用。

标签: r dplyr filtering


【解决方案1】:

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

included_elections <- as.Date(included_elections)

也就是说,按照@iod 的方法,更系统地结合您想要的条件(例如,您想要最后一次选举和何时进行倒数第二次选举)是一个更好的长期解决方案.

【讨论】:

    【解决方案2】:
    CMPdataset %>% group_by(country) %>% 
    filter(parfam==`10`, !country %in% nodata, date==max(edate), date>201000)
    

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

    【讨论】:

    • 谢谢!不幸的是,由于选民数据并不总是可用于最新的编码宣言数据,因为这些数据集并非全部来自同一来源,很遗憾我不能使用这种方法:/
    • 如果你分享你的数据示例,我相信确保只选择也有数据的最新选举很容易,而无需手动选择行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2018-12-05
    • 2021-09-01
    • 2011-07-25
    • 1970-01-01
    相关资源
    最近更新 更多