Как объединить два фрейма данных на основе двух столбцов?



Я знаю, что могу использовать plyr и его друзья, чтобы объединить фреймы данных, и merge также, но до сих пор я не знаю, как объединить два фрейма данных с несколькими столбцами на основе 2 столбцов?

563   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, но он также иллюстрирует слияние с использованием нескольких столбцов. Вы также можете указать отдельные столбцы в каждом из x и y используя by.x и by.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 означает то же самое.

Comments

    Ничего не найдено.