Ik weet dat ik de plyr
en 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 merge
dataframes 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 incomparables
te demonstreren, maar het illustreert ook het samenvoegen met behulp van meerdere kolommen. Je kunt ook afzonderlijke kolommen specificeren in elk van x
en y
met behulp van by.x
en 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$Hobby
en df2$like
hetzelfde betekenen.
Antwoord 3, autoriteit 8%
Je kunt ook het join-commando (dplyr) gebruiken.
Bijvoorbeeld:
new_dataset <- dataset1 %>% right_join(dataset2, by=c("column1","column2"))