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

标签 r

我有两个数据集:

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/

相关文章:

r - 如何安装多个包?

r - x 轴上以可变条形宽度作为日期范围的条形图

r - 使用逻辑表达式向量对 R 中的数据帧进行子集化

r - Shiny :更改另一个输入时重新启动/中断输出渲染

R dplyr 列用字母数字字符排序

r - 来自多个 if/else if 语句的多个操作 - R

r - R 编程错误 : Need help to fix it

当 r 中没有变量值时 reshape

r - 搜索和替换功能以重命名列

r - 将数据与 Base R 结合