Hoe combineer ik twee dataframes op basis van twee kolommen?

Ik weet dat ik de plyren zijn vrienden kan gebruiken om dataframes te combineren, en ook merge, maar tot nu toe weet ik niet hoe ik twee dataframes kan samenvoegen met meerdere kolommen gebaseerd op 2 kolommen?


Antwoord 1, autoriteit 100%

Zie de documentatie op ?merge, waarin staat:

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.

Dit houdt duidelijk in dat mergedataframes zal samenvoegen op basis van meer dan één kolom. Uit het laatste voorbeeld in de documentatie:

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

Dit voorbeeld was bedoeld om het gebruik van incomparableste demonstreren, maar het illustreert ook het samenvoegen met behulp van meerdere kolommen. Je kunt ook afzonderlijke kolommen specificeren in elk van xen ymet behulp van by.xen by.y.


Antwoord 2, autoriteit 41%

Hopelijk helpt dit;

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

Ervan uitgaande dat df1$Hobbyen df2$likehetzelfde betekenen.


Antwoord 3, autoriteit 8%

Je kunt ook het join-commando (dplyr) gebruiken.

Bijvoorbeeld:

new_dataset <- dataset1 %>% right_join(dataset2, by=c("column1","column2"))

Other episodes