【问题标题】:How can I merge these two datasets based on all closest timestamps?如何根据所有最接近的时间戳合并这两个数据集?
【发布时间】:2019-07-08 15:19:52
【问题描述】:

我有两个数据框,我想根据时间戳合并它们,但保留所有时间戳。本质上,将每个 med 时间戳(数据帧 a)与它之前和之后的所有实验室时间戳(数据帧 b)结合起来,直到下一个 med 时间戳。

我尝试将它们合并并进行滚动连接。

我想将数据帧 a 与数据帧 b 合并得到数据帧 c。

第一个数据帧 - 医疗时间 (a)

a<-data.frame("Patient" = c(rep("A", times = 2)),"Med_Time" = c(as.POSIXct("2018-05-11 10:37"), as.POSIXct("2018-05-12 17:16")))

第二个数据帧 - 实验室时间 (b)

b<-data.frame("Patient" = c(rep("A", times = 13)),"Lab_Time" = c(as.POSIXct("2018-05-11 02:15:00"),
             as.POSIXct("2018-05-11 06:25:00"),
             as.POSIXct("2018-05-11 12:45:00"),
             as.POSIXct("2018-05-11 16:51:00"),
             as.POSIXct("2018-05-11 21:51:00"),
             as.POSIXct("2018-05-12 05:46:00"),
             as.POSIXct("2018-05-12 12:42:00"),
             as.POSIXct("2018-05-12 17:09:00"),
             as.POSIXct("2018-05-12 21:16:00"),
             as.POSIXct("2018-05-13 06:04:00"),
             as.POSIXct("2018-05-13 10:45:00"),
             as.POSIXct("2018-05-13 16:02:00"),
             as.POSIXct("2018-05-13 21:40:00")),"Lab_Res" = c(70,80,122,180,161,170,210,212,278,156,172,174,165))

预期结果(c)

c<-data.frame("Patient" = c(rep("A", times = 13)),"Med_Time" = c(rep(as.POSIXct("2018-05-11 10:37:00"), times = 8),
             rep(as.POSIXct("2018-05-12 17:16:00"), times = 5)),"Lab_Time" = c(as.POSIXct("2018-05-11 02:15:00"),
             as.POSIXct("2018-05-11 06:25:00"),
             as.POSIXct("2018-05-11 12:45:00"),
             as.POSIXct("2018-05-11 16:51:00"),
             as.POSIXct("2018-05-11 21:51:00"),
             as.POSIXct("2018-05-12 05:46:00"),
             as.POSIXct("2018-05-12 12:42:00"),
             as.POSIXct("2018-05-12 17:09:00"),
             as.POSIXct("2018-05-12 21:16:00"),
             as.POSIXct("2018-05-13 06:04:00"),
             as.POSIXct("2018-05-13 10:45:00"),
             as.POSIXct("2018-05-13 16:02:00"),
             as.POSIXct("2018-05-13 21:40:00")),"Lab_Res" = c(70,80,122,180,161,170,210,212,278,156,172,174,165))

任何见解都会有所帮助!谢谢!

【问题讨论】:

    标签: r merge timestamp


    【解决方案1】:

    我们可以使用data.table加入

    library(data.table)
    setDT(a)[setDT(b)[, .(Patient, Med_Time = Lab_Time, Lab_Time, Lab_Res)], 
          on = .(Patient, Med_Time), roll = -Inf]
    

    【讨论】:

    • 此解决方案不包括 Med_Time 和 Lab_Time。
    • @S.Ash 你现在能查一下吗
    • on = .(Patient, Med_Time), roll = -Inf 现在似乎是一个未使用的参数。
    • @S.Ash 抱歉,应该是setDT(a)
    • 我收到以下错误:“错误:无效的下标类型'list'”。
    猜你喜欢
    • 2016-03-23
    • 2019-05-27
    • 2019-08-12
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多