在r条件中合并2个数据帧的日期在彼此的30d内

时间:2015-11-30 19:10:23

标签: r date merge dataframe conditional

我遇到了一些我无法通过2个数据帧的条件合并来回答的问题。让我来描述数据框(名称已更改):

  • 第一个,DF1,有一个名为' proceduredate'包含每个实例的过程日期(已由格式为%Y-%m-%d的as.Date格式化)。
  • 第二个,DF2,有一个名为' orderdate'其中包含每个实验室订单的日期(也由格式为%Y-%m-%d的as.Date格式化)。

每个数据框都有一个标识符(称为' id'),用于合并" by"跨两个数据帧。我想有条件地合并数据帧,以便仅包括在DF1中的过程中30天内具有orderdate的DF2实例。据我了解,这看起来像是:

if ([abs(DF1$procdate-DF2$orderdate)<=30]), then{
   merge(DF1,DF2,by="id")
}

但是,我无法找到将这个想法变成工作代码的方法。您会建议任何参考或类似的先前解决方案吗?

1 个答案:

答案 0 :(得分:1)

SQL比(基本)R更好地处理这个问题 - 虽然我相信在data.table中有一种方法可以做到这一点。

library(sqldf)
result = sqldf("
  select *
  from DF1 left join DF2 on
    abs(DF1.procdata - DF2.orderdate) <= 30
    AND DF1.id = DF2.id
")

我不确定这会与您的日期有关,也可能是Date类列。如果您提供可重复的示例,我很乐意进行测试。