Как я могу объединить эти два набора данных на основе всех ближайших временных отметок? - PullRequest
0 голосов
/ 08 июля 2019

У меня есть два кадра данных, и я хочу объединить их на основе меток времени, но сохранить все метки времени.По сути, чтобы объединить каждую временную метку med (dataframe a) со всеми лабораторными временными метками (dataframe 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))

Любое понимание будет полезно!Спасибо!

1 Ответ

1 голос
/ 08 июля 2019

Мы можем использовать data.table присоединиться

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