我想选择最接近日期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
答案 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