r - 与R中最近的日期合并

标签 r date merge match

我想按 ID 合并两个数据集。 dataset1 中的日期应仅与 dataset2 中最近的日期匹配。我希望 dataset1 中的所有日期都包含在合并中。

        dataset1 <- read.table(text="ID  Date     
A   2021-03-18  
A   2021-04-27
A   2021-04-05
A   2021-05-02
A   2021-02-08
A   2021-06-02
A   2021-05-29 ", header=TRUE)

        dataset2 <- read.table(text="ID  Date     
A   2021-01-01  
A   2021-01-01
A   2021-05-02
A   2021-05-09
A   2021-05-09
A   2021-05-09
A   2021-05-09
A   2021-06-16
A   2021-06-27 ", header=TRUE)

最佳答案

带有 roll = "nearest"data.table 选项:

setDT(dataset1)[, c("Date", "Date1") := as.Date(Date)]
setDT(dataset2)[, c("Date", "nearest") := as.Date(Date)]
dataset2[dataset1, on = .(ID, Date), roll = "nearest"][, Date := NULL][]

   ID    nearest      Date1
1:  A 2021-05-02 2021-03-18
2:  A 2021-05-02 2021-04-27
3:  A 2021-05-02 2021-04-05
4:  A 2021-05-02 2021-05-02
5:  A 2021-01-01 2021-02-08
6:  A 2021-06-16 2021-06-02
7:  A 2021-06-16 2021-05-29

匹配行数的其他选项:

dataset1[dataset2, on = .(ID, Date), roll = "nearest"][, Date := NULL][]
   ID      Date1    nearest
1:  A 2021-02-08 2021-01-01
2:  A 2021-02-08 2021-01-01
3:  A 2021-05-02 2021-05-02
4:  A 2021-05-02 2021-05-09
5:  A 2021-05-02 2021-05-09
6:  A 2021-05-02 2021-05-09
7:  A 2021-05-02 2021-05-09
8:  A 2021-06-02 2021-06-16
9:  A 2021-06-02 2021-06-27

关于r - 与R中最近的日期合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74128459/

相关文章:

python - 如何在python中获取时区感知午夜日期时间?

python - 将字典合并到列表字典中

r - 根据行名折叠,但列出所有折叠的值

r - 使用键值对字典有选择地重命名 R 数据框列名

swift - NSDate() 或 Date() 显示错误的时间

php - MySQL:统计A月到B月的数据

openid - SSO,Facebook连接,用户个人资料合并

Git:如何反向 merge 提交?

c++ - 直接在 RcppArmadillo 中调用 LAPACK 例程

r - 为插入符包中的多个列创建DataPartition