如何根据两列之间的条件连接数据框
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
函数做同样的事情。
我遇到了一个需要合并两个数据框的项目。它们看起来像这样:
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
函数做同样的事情。