¿Cómo combino dos marcos de datos basados ​​en dos columnas?

Sé que puedo usar el plyr y sus amigos para combinar marcos de datos y merge también, pero hasta ahora no sé cómo combinar dos marcos de datos con múltiples columnas basadas en 2 columnas.

Consulte la documentación en ?merge , que dice:

 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. 

Esto implica claramente que merge los marcos de datos basados ​​en más de una columna. Del último ejemplo dado en la documentación:

 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 

Este ejemplo fue diseñado para demostrar el uso de incomparables , pero ilustra la fusión usando múltiples columnas también. También puede especificar columnas separadas en cada una de y usando by.x y by.y

Espero que esto ayude;

 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")) 

Asumiendo df1$Hobby y df2$like significa lo mismo.