从两个数据框中选择日期并在R中创建新的数据框

时间:2018-04-20 11:09:06

标签: r date merge dplyr data.table

我想选择最接近日期A的日期(在日期B中),然后使用这些匹配创建新的数据框。每个ID可以有多行(即多个日期组合)。我正在使用dplyr和data.table包

dataframe A

ID  DATE A
3   15/05/06
5   14/11/05
8   25/11/08
1   16/12/10
1   5/01/12
1   24/07/14

dataframe B

ID  DATE B
3   12/12/05
3   17/04/06
5   25/07/05
5   26/09/05
5   1/12/05
8   12/09/08
8   13/11/08
8   23/12/08
8   31/03/09
1   26/11/10
1   12/08/11
1   12/11/11
1   14/03/14
1   8/08/14

Resultant dataframe:
ID  DATE A  DATE B
3   15/05/06    17/04/06
5   14/11/05    1/12/05
8   25/11/08    13/11/08
1   16/12/10    26/11/10
1   5/01/12     12/11/11
1   24/07/14    8/08/14

1 个答案:

答案 0 :(得分:1)

一个想法是在ID上合并,减去父亲并保持最小值,即

d1 <- transform(merge(df1, df2, by = 'ID'), 
                 diff1 = as.POSIXct(DATE_A, '%d/%m/%y') - as.POSIXct(DATE_B, '%d/%m/%y'))

do.call(rbind, by(d1, d1$ID, function(i) i[which.min(i$diff1), ] ))

给出,

  ID   DATE_A   DATE_B      diff1
3  3 15/05/06 17/04/06  -701 days
5  5 14/11/05 26/09/05 -4322 days
8  8 25/11/08 31/03/09 -1947 days