2017-12-13 2 views
0

Ich habe versucht zu suchen und ähnliche Probleme, aber nicht das gleiche Problem gefunden. Das scheint so etwas zu sein, also vermisse ich es wahrscheinlich.Mehrere Datenrahmen mit verschiedenen Feature-Sets verschmelzen

Ich habe mehrere CSV-Dateien Ich lese mit read.table ein. Ich möchte diese zusammenführen, so dass Zeilen mit der gleichen ID-Spalte cbind() zusammen sind und der Rest leer bleibt. Ein Beispiel unten wahrscheinlich besser illustriert

Datei 1

UserID val1  val2  
    1     2 
    2  1   3 

Datei 2

UserID col1 
    1   a 
    3   z 

Datei 3

UserID feat1 feat2 
    1  Hi  Hello 
    3  Moshi Moshi 

Gewünschtes Ergebnis

UserID  val1  val2 col1  feat1 feat2 
1      2  a  Hi  Hello 
2   1   3 
3        z  Moshi Moshi 

Ich möchte nicht, dass Nullen für fehlende Werte hinzugefügt werden. Ich möchte nicht, dass es, wenn möglich, irgendetwas mit NAs füllt.

Ich möchte nur Datensätze (3+ in allen Fällen, Durchschnitt von 10) auf einer UserID-Spalte kombinieren, alles andere gleich zu halten.

Ich bin mir sicher, dass es ein Werkzeug dafür gibt, ich kann es einfach nicht finden.

+0

können Sie verwenden reduzieren: 'df = Reduce (function (...) fusionieren (..., all = T), Liste (DATEI_1, file_2, DATEI_3))' wie für Füllwerts Zusammenführen, am einfachsten kann ich folgendes tun: 'df [is.na (df)] = ''' Dies setzt voraus, dass alle 'NA'-Werte im Datensatz gleich behandelt werden. Andernfalls müssen Sie verschiedene 'NA's mit jedem Datenrahmen codieren, um keine Informationen zu verlieren. – bringtheheat

+0

Der richtige Weg, um dies zu tun, führt zu "NA" in nicht übereinstimmenden Positionen. Das ist der korrekte Wert, den man dort platzieren muss. Wenn Sie etwas anderes möchten, benötigen Sie einen zweiten Schritt, um sie zu ersetzen. Aber es ist irgendwie unsinnig zu verlangen, dass sie alle durch den gleichen Wert ersetzt werden, wenn Sie eine Mischung aus Zeichen/numerischen Spalten haben. Also bist du besser dran mit NA zu bleiben. – joran

Antwort

-1

Die Zusammenführungsfunktion ertönt dafür.

merged_df <- merge(df1, df2, by="UserID") 

Sie können dies dann iterativ anwenden, z.

for(i in 2:number_data_frames){ 
    merged_df <- merge(merged_df, list_of_dfs[[i]], by="UserID") 
} 
Verwandte Themen