Я знаю, что я могу использовать plyr
и его друзей, чтобы объединить dataframes и merge
, но пока я не знаю, как объединить два фрейма данных с несколькими столбцами на основе двух столбцов?
Как объединить два кадра данных на основе двух столбцов?
Ответ 1
См. документацию на ?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 match
Этот пример предназначен для демонстрации использования incomparables
, но он иллюстрирует слияние с использованием нескольких столбцов. Вы также можете указать отдельные столбцы в каждом из x
и y
с помощью by.x
и by.y
.
Ответ 2
Надеюсь, что это поможет;
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
означают одно и то же.