2016-12-02 7 views
0

Ich habe zwei Datenrahmen unterschiedlicher Länge (n = 3012 und 3008), die ich basierend auf dem Datum zusammenführen muss. Ich habe versucht, die Funktionen merge und rbindfill zu verwenden, hatte aber keinen Erfolg. Der gemeinsame Thread zwischen den beiden Datenrahmen ist date_time, aber sowohl df2 hat nicht alle die gleichen Werte wie df1.Datenrahmen unterschiedlicher Länge durch übereinstimmende Daten zusammenführen

df1

ID date_time Q_cfs Data_Code 
68 2016-11-01 00:00:00 353   P 
69 2016-11-01 00:15:00 356   P 
70 2016-11-01 00:30:00 357   P 
71 2016-11-01 00:45:00 356   P 
72 2016-11-01 01:00:00 358   P 
73 2016-11-01 01:15:00 355   P 

df2

ID stage   date_time 
1 4.82 2016-11-01 00:00:00 
2 4.83 2016-11-01 00:15:00 
3 4.84 2016-11-01 00:30:00 
4 4.85 2016-11-01 00:45:00 
5 4.86 2016-11-01 01:00:00 
6 4.87 2016-11-01 01:15:00 

Ich versuchte (unten) mit fusionieren, aber es funktionierte nicht, da die Säulenlängen unterschiedlich sind.

Ich habe auch versucht mit rbind.fill (unten), aber es ersetzt alle Werte von DF2 mit.

DF_New <- rbind.fill(df1,df2) 

Irgendwelche Vorschläge?

+0

Ihre Annahmen über den Grund für das Scheitern sind falsch. Zusammenführungen mit Datenfeldern ungleicher Zeilennummer sind typisch. Wenn Sie zur Date-Klasse gezwungen werden müssen, verwenden Sie 'as.Date'. –

Antwort

2

Verwenden Sie das dplyr-Paket und versuchen Sie left_join(). Dies gibt alle Zeilen von df1 und alle Spalten von df1 und df2 zurück. Alle Zeilen in df1 ohne Übereinstimmung erhalten NA.

library(dplyr) 
left_join(df1, df2, by = "date_time") 

Schauen Sie sich die anderen Arten Sie beitreten können mit ?join haben.

0

Sie haben es fast richtig ist, alles, was Sie tun müssen, ist ein weiteres Argument in Ihrer Funktion hinzuzufügen:

DF_New < - fusionieren (DF1, DF2, by.x = df1 $ date_time, by.y = df2 $ date_time, all = TRUE)

+0

Ich bekomme immer noch den folgenden Fehler. Fehler in fix.by (by.x, x): 'mit' muss die Anzahl der Spalten entsprechen – Koda

+0

Dann versuchen Sie einfach: von "date_time – Wister

+0

DF_New <- zusammenführen (df1, df2, by.x = df1 $ date_time, by .y = df2 $ date_time, all = TRUE) – Wister

Verwandte Themen