我有两个数据集:
table1 <- data.frame(id=c(1000,1001,1002,1003),
date=as.POSIXct(c("2012-05-13","2012-09-23","2011-04-09","2014-11-08")))
table2 <- data.frame(id2=c(1000,1000,1001,1002,1003,1003),
date2=as.POSIXct(c("2012-05-13","2012-05-16","2012-09-24","2011-04-15","2014-11-09", "2014-11-10")))
我想根据匹配的 ID 和日期对表 1 进行左连接,但并非所有日期都完全匹配,所以我想知道如何根据最近的日期连接日期?例如,对于 id 1001,“2012-09-23”将匹配 id2 1001 的“2012-09-24”,因为它是 id2 的唯一日期,而对于 1003,“2014-11-08”将匹配“2014-11” -09"of 1003 for id2 因为它是最近的一天。
期望的结果:
id date date2
1 1000 2012-05-13 2012-05-13
2 1001 2012-09-23 2012-09-24
3 1002 2011-04-09 2011-04-15
4 1003 2014-11-08 2014-11-09
最佳答案
我还建议您遵循非 equi data.table
连接,但如果您出于任何原因想要坚持使用 dplyr
和您的数据不是很大或者你有足够的内存,你也可以尝试:
library(dplyr)
table1 %>%
left_join(table2, by = c("id" = "id2")) %>%
group_by(id) %>%
slice(which.min(abs(date - date2)))
输出:
# A tibble: 4 x 3
# Groups: id [4]
id date date2
<dbl> <dttm> <dttm>
1 1000 2012-05-13 00:00:00 2012-05-13 00:00:00
2 1001 2012-09-23 00:00:00 2012-09-24 00:00:00
3 1002 2011-04-09 00:00:00 2011-04-15 00:00:00
4 1003 2014-11-08 00:00:00 2014-11-09 00:00:00
关于r - 使用精确值加上最接近的值进行左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54892162/