2017-04-26 70 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 –