我遇到了一些我无法通过2个数据帧的条件合并来回答的问题。让我来描述数据框(名称已更改):
每个数据框都有一个标识符(称为' id'),用于合并" by"跨两个数据帧。我想有条件地合并数据帧,以便仅包括在DF1中的过程中30天内具有orderdate的DF2实例。据我了解,这看起来像是:
if ([abs(DF1$procdate-DF2$orderdate)<=30]), then{
merge(DF1,DF2,by="id")
}
但是,我无法找到将这个想法变成工作代码的方法。您会建议任何参考或类似的先前解决方案吗?
答案 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
类列。如果您提供可重复的示例,我很乐意进行测试。