2015-08-18 26 views
18

dplyr kullanarak R'de birden çok veri çerçevesine nasıl katılırım? Dplyr kullanarak birden çok sol birleşmeyi nasıl gerçekleştirilir? R

new <- left_join(x,y, by = "Flag") 

bu

Ben Sen iç içe kullanabilirsiniz kod katına için çalışmıyor x ve y

new <- left_join(x,y,z by = "Flag") 
+1

(http://stackoverflow.com/questions/8091303/simultaneously-merge-multiple-data-frames-in-a-list), genellikle [ile R birden çok veri setleri birleştirme Bu nasıl]. İsterseniz 'birleştirme 'yerine' left_join' kullanabilirsiniz. –

+1

'Reduce (işlev (dtf1, dtf2) left_join (dtf1, dtf2, by =" index "), list (x, y, z))' öğelerini kullanın. Bu soru çift olarak işaretlendiğinden, [Aynı anda bir listedeki birden çok data.frames'i birleştirme] (http://stackoverflow.com/a/34393416/2641825) sorusuyla ilgili örnekle ayrıntılı bir cevap verdim. –

cevap

36

katılır katılmak sola kullanıyorum kodudur left_join

left_join(x, y, by='Flag') %>% 
       left_join(., z, by='Flag') 

Ya diğer bir seçenek list'daki tüm veri kümelerini yerleştirir ve base R'danile merge'u kullanır

Reduce(function(...) merge(..., by='Flag', all.x=TRUE), list(x,y,z)) 

Ya da plyr den join_all var. Burada ayrıca, datafram'ları list'a yerleştiriyoruz ve sol birleştirme için argüman type='left''u kullanıyoruz.

library(plyr) 
join_all(list(x,y,z), by='Flag', type='left') 
+5

Sanırım 'left_join 'öğesini' Reduce 'içine de yerleştirebilirsiniz, ama sanırım dün birkaç kez sorulmuş gibi görünüyor, değil mi? –

+0

@DavidArenburg Evet, birden fazla veri kümesi için kullanılabilir ve yararlıdır. Sadece%>% 'yi kullanmayı düşündüm. – akrun

+1

Boru opsiyonu ve join_left ile azaltma daha hızlıdır (1.8s) (örneğin, verilere bağlı olarak yaklaşık 10 kat daha hızlıdır). Birleştirme ile azaltma çok yavaş (16s) ancak sol_join ile birleşmeyi değiştirirseniz, borununkiyle karşılaştırılabilir bir hıza sahip olursunuz (wee biraz ortalama 1.9s yavaş fakat önemli değil). En yavaşı, plyr'den (22s) join_all'dir. –

İlgili konular