Цель
У меня есть два набора данных, df1 и df2. Я хотел бы объединить два, только когда их значения даты и времени совпадают в течение 20 секунд друг от друга. Я также хотел бы сохранить столбец Duration в столбце df2
df1
End Duration
1/22/2020 5:42:13 AM 34
1/30/2020 12:12:50 AM 5
df2
Sent
1/22/2020 5:42:20 AM
1/31/2020 12:00:00 PM
Желаемый результат:
End Sent Duration
1/22/2020 5:42:13 AM 1/22/2020 5:42:20 AM 34
Выход:
df1
structure(list(End = structure(1:2, .Label = c("1/22/2020 5:42:13 AM",
"1/30/2020 12:12:50 AM"), class = "factor"), Duration = c(34L,
5L)), class = "data.frame", row.names = c(NA, -2L))
df2
structure(list(Sent = structure(1:2, .Label = c("1/22/2020 5:42:20 AM",
"1/31/2020 12:00:00 PM"), class = "factor")), class = "data.frame", row.names = c(NA,
-2L))
То, что я пробовал
df3<-crossing(endtime = as.POSIXct(df1$End,format ="%m/%d/%Y %I:%M:%S %p" ),
SentTime = as.POSIXct(df2$Sent, format = "%m/%d/%Y %I:%M:%S %p")) %>%
filter((endtime - seconds(20)) <= SentTime,
(endtime + seconds(20)) >= (SentTime)) %>%
mutate_all(format, format = "%m/%d/%Y %I:%M:%S %p") %>%
distinct(SentTime, .keep_all = TRUE)
Приведенный выше код хорошо совпадает с датой и временем в течение 20 секунд, однако соответствующий столбец длительности отсутствует. Как можно сопоставить эти наборы данных, если они находятся в пределах 20 секунд друг от друга, при этом сохраняя соответствующий столбец Продолжительность?
Любое предложение приветствуется.