2016-07-14 21 views
0

Also habe ich diese große Liste von Datenrahmen, und einige von ihnen haben übereinstimmende Spalten und andere nicht. Ich möchte diejenigen mit übereinstimmenden Spalten verknüpfen und die anderen zusammenführen, die keine übereinstimmenden Spalten haben (basierend auf den Variablen Jahr, Land). Ich möchte jedoch nicht alle Datenrahmen von Hand durchgehen, um zu sehen, welche Spalten übereinstimmende haben und welche nicht.Rbind und merge in R

Jetzt dachte ich, dass es etwas entlang der Linien von aussehen:

myfiles = list.files(pattern="*.dta") 
dflist <- lapply(myfiles, read.dta13) 

for (i in 1:length(dflist)){ 

    if colnames match 
    put them in list and rbindlist. 
    else put them in another list and merge. 
}  

Abgesehen von nicht zu wissen, wie diese genau in R zu tun, ich bin dies funktionieren würde, nicht zu denken beginne nach alle.

illustrieren Um 6 Datenrahmen betrachten:

Dataframe 1:       Dataframe 2: 

Country Sector Emp    Country Sector Emp 
Belg  A  35    NL  B  31 
Aus  B  12    CH  D  45 
Eng  E  18    RU  D  12 

Dataframe 3:      Dataframe 4: 
Country Flow PE    Country Flow PE 
NL  6  13     ... ... ... 
HU  4  11     ... ... 
LU  3  21     ... 

Dataframe 5:    dataframe 6: 

Country Year Exp   Country Year Imp 
GER  02 44   BE  00 34 
GER  03 34   BE  01 23 
GER  04 21   BE  02 41 

In diesem Fall würde ich (Datenrahmen 1, dataframe2) und rbind (Datenrahmen 3, Datenrahmen 4) rbind wollen, und ich möchte Datenrahmen 5 fusionieren und 6, basierend auf Variablen Land und Jahr. Also meine Ausgabe wäre mehrere rbinded/verschmolzene Datenrahmen.

+0

ich merge denken (mit allen = TRUE) wird rbind (wenn auch langsamer), so dass es ihnen nur verschmelzen alle zusammen arbeiten könnte. Um dies zu tun, http://stackoverflow.com/questions/8091303/simultously-merge-multiple-data-frames-in-a-list – Aaron

Antwort

0

Rbind wird fehlschlagen, wenn die Spalten nicht identisch sind. Wie vorgeschlagen, können Sie merge oder left_join aus dem dplyr Paket verwenden.

Vielleicht wird diese Arbeit: do.call(left_join, dflist)