dplyr-基于日期差的联接表

时间:2019-02-26 05:54:24

标签: r join lubridate

已经晚了,我无法弄清楚。我正在使用lubridate和dlypr。

我的数据如下:
    table1 = 1每个受试者的观察结果,并带有日期

table2 =每个对象具有相关日期的1个或更多观察结果

当我退出联接时,我实际上添加了观察值。这是因为表2中有多个与键匹配的记录。我该如何简单地将其作为条件联接,以使表2中只有1条匹配记录被联接,因为它的日期最接近表1中的日期。

抱歉,这很冗长。

1 个答案:

答案 0 :(得分:0)

使用data.table-package加入。使用roll = "nearest"来获取最接近的匹配项。

library(data.table)
dt1 <- data.table( id = 1:10, date = 1:10, stringsAsFactors = FALSE )
dt2 <- data.table( date = 6:15, letter = letters[1:10], stringsAsFactors = FALSE )

dt1[, letter := dt2[dt1, letter, on = "date", roll = "nearest"] ][]

#    id date letter
# 1:  1    1      a
# 2:  2    2      a
# 3:  3    3      a
# 4:  4    4      a
# 5:  5    5      a
# 6:  6    6      a
# 7:  7    7      b
# 8:  8    8      c
# 9:  9    9      d
# 10: 10   10     e