通过最近的日期和另一个变量连接R中的两个数据帧



我有两个数据帧,一个价格数据集和一个调查数据集,我需要在最近的日期加入它们。日期并不完全匹配,我需要价格数据集与调查数据集中最接近的日期匹配。我之前在这里问的一个关于这个的问题非常有帮助,它给了我一个关于如何在最近的约会中匹配的答案。但是,我后来意识到,我还需要加入区域数据集,以及最近的日期。我知道如何在最近的日期加入,我知道如何加入一个地区,但不幸的是,我不知道如何在最近的日期完全相同的地区加入。

这里有一些示例代码和我一直在尝试的

#generating sample dataset
set.seed(1234)
price <- data.frame(region = sample(LETTERS[1:3],15,replace = TRUE), price = rnorm(15),price_date=sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 15)) 
survey <- data.frame(region = sample(LETTERS[1:3],15,replace = TRUE), survey_date=sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 15)) 
#this works to join on the closest date, however, the regions don't match, which is a problem

library(data.table)
setDT(price)
setDT(survey)
join <- price[survey,on=.(price_date=survey_date),roll="nearest"]

基本上我想做的是将price的日期/区域观测值与最近的日期相匹配,survey中相同的区域观测值,我不确定如何做到这一点。如有任何帮助,不胜感激。

您可以将区域添加到on条件:

price[survey,.(region,price,x.price_date,survey_date),on=.(region,price_date=survey_date),roll="nearest"][]
region       price x.price_date survey_date
<char>       <num>       <Date>      <Date>
1:      A  0.88010416   1999-10-26  1999-09-05
2:      B  0.31026217   1999-12-25  1999-12-31
3:      A -1.68732684   1999-04-27  1999-06-02
4:      C  0.00500695   1999-08-09  1999-05-11
5:      C  0.00500695   1999-08-09  1999-03-24
6:      B -0.03763026   1999-08-12  1999-09-02
7:      C -0.64701901   1999-12-24  2000-01-01
8:      B -0.03763026   1999-08-12  1999-08-06
9:      C  0.00500695   1999-08-09  1999-08-03
10:      A  0.88010416   1999-10-26  1999-11-22
11:      C  1.37001035   1999-09-15  1999-10-03
12:      B  0.01831663   1999-07-01  1999-06-18
13:      A -0.62743621   1999-03-20  1999-03-12
14:      B  0.72397606   1999-02-18  1999-03-02
15:      C -0.64701901   1999-12-24  1999-12-18

注意使用x.来显示LHS日期。

最新更新