У меня есть два отдельных набора данных: df1 и df2. Я хотел бы создать новый набор данных, df3, который бы соответствовал столбцу конечного времени df1 с отправленным столбцом df2, если даты и время находятся в пределах 20 секунд друг от друга.
df1
endtime ID
1/7/2020 1:35:08 AM A
1/7/2020 1:39:00 AM B
1/20/2020 1:45:00 AM C
df2
sent ID
1/7/2020 1:35:20 AM E
1/7/2020 1:42:00 AM F
1/20/2020 1:55:00 AM G
1/20/2020 2:00:00 AM E
Это мой желаемый вывод для df3. Есть только одна строка, потому что есть только два значения, которые соответствуют условию нахождения в пределах 20 секунд от конечного времени и отправленных столбцов. Я хотел бы уникальные матчи, а не комбинации. По сути, слияние с условием времени.
endtime sent
1/7/2020 1:35:08 AM 1/7/2020 1:35:20 AM
Вот dput:
df1
structure(list(endtime = structure(c(2L, 3L, 1L), .Label = c("1/10/2020 1:45:00 AM",
"1/7/2020 1:35:08 AM", "1/7/2020 1:39:00 AM"), class = "factor"),
ID = structure(1:3, .Label = c("A", "B", "C"), class = "factor")), class = "data.frame", row.names = c(NA,
-3L))
df2
structure(list(sent = structure(c(3L, 4L, 1L, 2L), .Label = c("1/20/2020 1:55:00 AM",
"1/20/2020 2:00:00 AM", "1/7/2020 1:35:20 AM", "1/7/2020 1:42:00 AM"
), class = "factor"), ID = structure(c(1L, 2L, 3L, 1L), .Label = c("E",
"F", "G"), class = "factor")), class = "data.frame", row.names = c(NA,
-4L))
Вот что я пробовал:
Я думаю о выполнении оставьте соединение и сопоставьте значения, или я могу использовать merge (), но сложная часть сопоставляет значения с условным оператором. Любое предложение приветствуется.
library(dplyr)
left_join(df1, df2)