plyr
とそのフレンドを使用してデータフレームを結合できることはわかっていますが、merge
も同様ですが、2つのデータフレームを2列に基づいて複数の列にマージする方法がわかりません
?merge
のドキュメントを参照してください。
By default the data frames are merged on the columns with names they both have,
but separate specifications of the columns can be given by by.x and by.y.
これは、merge
が複数の列に基づいてデータフレームをマージすることを明確に暗示しています。ドキュメントに記載されている最後の例から:
x <- data.frame(k1=c(NA,NA,3,4,5), k2=c(1,NA,NA,4,5), data=1:5)
y <- data.frame(k1=c(NA,2,NA,4,5), k2=c(NA,NA,3,4,5), data=1:5)
merge(x, y, by=c("k1","k2")) # NA's match
この例は、incomparables
の使用方法を示すことを目的としていますが、複数の列を使用したマージも示しています。 by.x
およびby.y
を使用して、x
およびy
のそれぞれに個別の列を指定することもできます。
お役に立てれば;
df1 = data.frame(CustomerId=c(1:10),
Hobby = c(rep("sing", 4), rep("pingpong", 3), rep("hiking", 3)),
Product=c(rep("Toaster",3),rep("Phone", 2), rep("Radio",3), rep("Stereo", 2)))
df2 = data.frame(CustomerId=c(2,4,6, 8, 10),State=c(rep("Alabama",2),rep("Ohio",1), rep("Cal", 2)),
like=c("sing", 'hiking', "pingpong", 'hiking', "sing"))
df3 = merge(df1, df2, by.x=c("CustomerId", "Hobby"), by.y=c("CustomerId", "like"))
df1$Hobby
とdf2$like
は同じことを意味すると仮定します。
Joinコマンド(dplyr)を使用することもできます。
例えば:
new_dataset <- dataset1 %>% right_join(dataset2, by=c("column1","column2"))