2つのデータフレームをマージする必要があるプロジェクトで立ち往生しています。それらは次のようになります。
Data1
Traffic Source Registrations Hour Minute
organic 1 6 13
social 1 8 54
Data2
Email Hour2 Minute2
[email protected] 6 13
[email protected] 8 55
2つのデータフレームをマージする次のコード行があります。
merge.df <- merge(Data1, Data2, by.x = c( "Hour", "Minute"),
by.y = c( "Hour2", "Minute2"))
可変時間(時間と分)が2つのデータセット間でわずかにずれていなければ、うまくいきます。 +または-1分ずれている場合、列「Minute」を「Minute2」と一致させる方法はありますか?
データセット1に対して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
関数を使用して同じことを行うことができます。