% group_by(id) %>% slice(which.min-6ren">
gpt4 book ai didi

r - 使用精确值加上最接近的值进行左连接

转载 作者:行者123 更新时间:2023-12-02 03:20:43 24 4
gpt4 key购买 nike

我有两个数据集:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com