2017-04-26 68 views
0

我想合併2個數據幀,每個數據幀具有相同的列名Date_Time但行數不同。我想合併這些取決於Date_Time和這裏我希望所有的行應該包括如果列值(Date_Time)是相等的我必須得到定向值(cmpny_name,Price)否則我必須得到NA。防爆Dateset是, DF1:在R編程中合併

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 

我的預期輸出繼電器(DF3)是

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

我會建議修改您的預期輸出。你真的想要兩個同名的列('Price')嗎? – davechilders

回答

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

dplyr方式:

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

謝謝你neilfws。 。其實我試過這個df3 < - merge(df1,df2,by =「Date_Time」,all = TRUE)。它在我發佈在這裏的小尺寸數據上工作正常。但在我的情況下,在df1中使用4484683行,在df2中使用92768行。 。問題在於,如果打印df1值,則NA以df2值打印。如果出現df2值,則以df1值打印NA。 –

+0

謝謝你neilfws。 。其實我試過這個df3 < - merge(df1,df2,by =「Date_Time」,all = TRUE)。它在我發佈在這裏的小尺寸數據上工作正常。但在我的情況下,在df1中使用4484683行,在df2中使用92768行。 。問題在於,如果打印df1值,則NA以df2值打印。如果出現df2值,則以df1值打印NA.Date_Time Cmny_Name價格Cmny_Name1價格1/1/2015 13:27 A 1083 NA不適用 1/1/2015 13:35不適用A 1084 –

0

您可以使用基本功能merge合併:

## 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 

或者,如果你願意,你可以如使用join-功能從dplyr包:

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 

注:由於得到的數據幀需要有獨特的列名,列Price是在合併過程中改名爲Pice.xPrice.y

+0

謝謝您ikop。 。其實我試過這個df3 < - merge(df1,df2,by =「Date_Time」,all = TRUE)。它在我發佈在這裏的小尺寸數據上工作正常。但在我的情況下,在df1中使用4484683行,在df2中使用92768行。 。問題在於,如果打印df1值,則NA以df2值打印。如果出現df2值,則以df1值打印NA.Date_Time Cmny_Name價格Cmny_Name1價格1/1/2015 13:27 A 1083 NA不適用 1/1/2015 13:35不適用A 1084 –