2017-04-26 11 views
0

Ich möchte zwei Datenrahmen zusammenführen, wobei jeder den gleichen Spaltennamen Date_Time aber unterschiedliche Zeilenanzahl hat. Ich möchte diese abhängig von Date_Time zusammenführen und hier möchte ich, dass alle Zeilen enthalten sind, wenn der Spaltenwert (Date_Time) gleich ist, muss ich orientierte Werte erhalten (cmpny_name, Price), sonst muss ich NA bekommen. Ex Dateset ist, df1:Zusammenführen in R-Programmierung

Cmny_Name  Date_Time  Price 
A   1/1/2015 13:27 1083 
B   1/1/2015 13:28 1084 
C   1/1/2015 13:29 1053 
D   1/1/2015 13:31 1063 
E   1/1/2015 13:33 1033 

df2:

Cmny_Name1  Date_Time  Price 
A   1/1/2015 13:27 1043 
A   1/1/2015 13:28 1053 
A   1/1/2015 13:29 1054 
A   1/1/2015 13:35 1084 

Mein Expected Ouput (df3) ist

Date_Time  Cmny_Name Price Cmny_Name1  Price 
1/1/2015 13:27 A   1083  A   1043 
1/1/2015 13:28 B   1084  A   1053 
1/1/2015 13:29 C   1053  A   1054 
1/1/2015 13:31 D   1063  A   NA 
1/1/2015 13:33 E   1033  A   NA 
1/1/2015 13:35 NA   NA   A   1084 
+0

Ich würde empfehlen, die erwartete Ausgabe zu ändern. Wollen Sie wirklich zwei Spalten mit dem gleichen Namen ('Price')? – davechilders

Antwort

0
df3 <- merge(df1, df2, by = "Date_Time", all = TRUE) 

oder ein dplyr Weg:

library(dplyr) 
df3 <- df1 %>% 
    full_join(df2, by = "Date_Time") 
+0

Vielen Dank neilfws. . Eigentlich habe ich versucht, diese df3 <- merge (df1, df2, von = "Date_Time", alle = TRUE). Es funktioniert gut mit kleinen Daten, die ich hier gepostet habe. Aber in meinem Fall verwende ich 4484683 Reihen in df1 und 92768 Reihen in df2. . Das Problem ist hier, dass NA in df2-Werten gedruckt wird, wenn der df1-Wert gedruckt wird. und NA wird in df1-Werten gedruckt, wenn der df2-Wert erscheint. –

+0

Vielen Dank neilfws. . Eigentlich habe ich versucht, diese df3 <- merge (df1, df2, von = "Date_Time", alle = TRUE). Es funktioniert gut mit kleinen Daten, die ich hier gepostet habe. Aber in meinem Fall verwende ich 4484683 Reihen in df1 und 92768 Reihen in df2. . Das Problem ist hier, dass NA in df2-Werten gedruckt wird, wenn der df1-Wert gedruckt wird. und NA wird in df1-Werten gedruckt, wenn der df2-Wert angezeigt wird.Datum_Zeit Cmny_Name Preis Cmny_Name1 Preis 1/1/2015 13:27 A 1083 NA NA 01.01.2015 13:35 NA NA A 1084 –

0

Sie können merge mit der Basisfunktion fusionieren:

## Your data: 
df1 <- structure(list(Cmny_Name = c("A", "B", "C", "D", "E"), 
       Date_Time = c("1/1/2015 13:27", "1/1/2015 13:28", 
         "1/1/2015 13:29", "1/1/2015 13:31", 
         "1/1/2015 13:33"), 
       Price = c(1083L, 1084L, 1053L, 1063L, 1033L)), 
     .Names = c("Cmny_Name", "Date_Time", "Price"), 
     class = "data.frame", row.names = c(NA, -5L)) 
df2 <- structure(list(Cmny_Name1 = c("A", "A", "A", "A"), 
       Date_Time = c("1/1/2015 13:27", "1/1/2015 13:28", 
         "1/1/2015 13:29", "1/1/2015 13:35"), 
       Price = c(1043L, 1053L, 1054L, 1084L)), 
     .Names = c("Cmny_Name1", "Date_Time", "Price"), 
     class = "data.frame", row.names = c(NA, -4L)) 

## Merging the two data frames: 
df3 <- merge(x = df1, y = df2, by = "Date_Time", all = TRUE) 

df3 
#  Date_Time Cmny_Name Price.x Cmny_Name1 Price.y 
# 1 1/1/2015 13:27   A 1083   A 1043 
# 2 1/1/2015 13:28   B 1084   A 1053 
# 3 1/1/2015 13:29   C 1053   A 1054 
# 4 1/1/2015 13:31   D 1063  <NA>  NA 
# 5 1/1/2015 13:33   E 1033  <NA>  NA 
# 6 1/1/2015 13:35  <NA>  NA   A 1084 

Oder wenn Sie möchten, könnte z.B. Verwenden Sie die Join-Funktionen aus dem dplyr Paket:

df3 <- dplyr::full_join(df1, df2, by = "Date_Time") 

df3 
# Cmny_Name  Date_Time Price.x Cmny_Name1 Price.y 
# 1   A 1/1/2015 13:27 1083   A 1043 
# 2   B 1/1/2015 13:28 1084   A 1053 
# 3   C 1/1/2015 13:29 1053   A 1054 
# 4   D 1/1/2015 13:31 1063  <NA>  NA 
# 5   E 1/1/2015 13:33 1033  <NA>  NA 
# 6  <NA> 1/1/2015 13:35  NA   A 1084 

Hinweis: Da die resultierenden Datenrahmen eindeutige Spaltennamen haben müssen, werden die Spalten PricePice.x und Price.y während der Zusammenführung umbenannt.

+0

Vielen Dank ikop. . Eigentlich habe ich versucht, diese df3 <- merge (df1, df2, von = "Date_Time", alle = TRUE). Es funktioniert gut mit kleinen Daten, die ich hier gepostet habe. Aber in meinem Fall verwende ich 4484683 Reihen in df1 und 92768 Reihen in df2. . Das Problem ist hier, dass NA in df2-Werten gedruckt wird, wenn der df1-Wert gedruckt wird. und NA wird in df1-Werten gedruckt, wenn der df2-Wert erscheint.Datum_Zeit Cmny_Name Preis Cmny_Name1 Preis 1/1/2015 13:27 A 1083 NA NA 01.01.2015 13:35 NA NA A 1084 –