【发布时间】:2020-06-06 05:37:27
【问题描述】:
我有两个独立的数据集:df1 和 df2。我想创建一个新的数据集 df3,如果日期时间在 20 秒内,它将匹配 df1 的 endtime 列和 df2 的发送列。
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 输出。只有一行,因为只有两个值符合 endtime 和 sent 列的 20 秒内的条件。我想要独特的匹配,而不是组合。本质上是与时间条件的合并。
endtime sent
1/7/2020 1:35:08 AM 1/7/2020 1:35:20 AM
这是输出:
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)
【问题讨论】:
-
有多少行?我问是因为这样做的一种方法是将
df1中的每一行与df2中的每一行合并,然后删除条件不存在的所有行t持有... O
标签: r datatable dplyr lubridate