如何根据两列之间的条件连接数据框

How to join data frames based on condition between 2 columns

我遇到了一个需要合并两个数据框的项目。它们看起来像这样:

Data1
Traffic Source    Registrations    Hour    Minute
organic           1                6        13
social            1                8        54

Data2
Email                     Hour2   Minute2
test@domain.com           6         13
test2@domain2.com         8         55

我有以下代码行来合并 2 个数据框:

merge.df <- merge(Data1, Data2, by.x = c( "Hour", "Minute"),
           by.y = c( "Hour2", "Minute2"))

如果两个数据集之间的可变时间(小时和分钟)没有稍微偏离,它会很好用。有没有办法让 "Minute" 列与 "Minute2" 相匹配,如果它是 + 或 - 一分钟?

我想我可以为数据集一​​创建 2 个新列:

Data1
Traffic Source    Registrations   Hour   Minute    Minute_plus1   Minute_minus1
organic           1               6        13      14              12
social            1               8        54      55              53

如果 "Minute2" 匹配 "Minute"、"Minute_plus1" 或 "Minute_minus1" 中的任何变量,是否可以合并 2 个数据框?或者有没有更有效的方法来完成这个合并?

对于这样的事情,我通常转向 SQL:

library(sqldf)
x = sqldf("
  SELECT *
  FROM Data1 d1 JOIN Data2 d2
  ON d1.Hour = d2.Hour2
  AND ABS(d1.Minute - d2.Minute2) <= 1
")

根据您的数据大小,您也可以在 Hour 上加入,然后过滤。使用 dplyr:

library(dplyr)
x = Data1 %>%
  left_join(Data2, by = c("Hour" = "Hour2")) %>%
  filter(abs(Minute - Minute2) <= 1)

尽管您可以使用 base 函数做同样的事情。