2016-12-29 119 views
-3

我有2個數據框。這些都是如下:如何組合兩個不同長度的數據幀?

df1 
Date Duration 
6/27/2014 10.00 
6/30/2014 20.00 
7/11/2014 15.00 

df2 
Date Percent_Removal 
6/27/2014 20.39 
6/30/2014 27.01 
7/7/2014 49.84 
7/11/2014 59.48 
7/17/2014 99.04 

我想合併基礎上DF1「日期」欄這兩個數據幀。輸出應該是這樣的:

df3 
Date Duration_sum Percent_Removal 
6/27/2014 10.00  20.39 
6/30/2014 20.00  27.01 
7/11/2014 15.00  59.48 

我嘗試了以下功能:

df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y") 
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y") 
df3<- as.data.frame (merge(df1,df2,by.x = "Date",all.x = TRUE)) 

我的輸出是:

DF3

Date  Duration_sum Percent_Removal 
6/27/2014  10.00   NA 
6/30/2014  20.00   NA 
7/11/2014  15.00   NA 

我會,如果有人非常感謝可以幫助我解決這個問題。提前致謝。

+1

'merge.data.frame(df1,df2)' – dww

+1

'df3 = merge(df1,df2,by =「Date」,all.x = TRUE)'。這將丟棄'df2'中的所有行,它們與'df1'中的'Date'不匹配。如果您希望保留兩個數據幀中的所有行,而不管其他數據幀中是否有匹配,則可以使用all = TRUE而不是all.x = TRUE。 – eipi10

+0

(1)'merge(df1,df2,by =「Date」,all = TRUE)'的結果是什麼? (2)將日期存儲爲字符值的相同問題。 –

回答

0

這對於評論來說太長,但實際上只需要證明我在評論中給出的解決方案確實有效。如果您有越來越合併工作的問題,那麼就必須有一些其他的問題與您的數據,這是我們無法診斷,因爲你沒有提供你data.frames的dput

df1 = read.table(text = 
"Date Duration 
6/27/2014 10.00 
6/30/2014 20.00 
7/11/2014 15.00", 
header = T) 

df2 = read.table(text = 
"Date Percent_Removal 
6/27/2014 20.39 
6/30/2014 27.01 
7/7/2014 49.84 
7/11/2014 59.48 
7/17/2014 99.04", 
header = T) 

df1$Date <- as.Date (df1$Date, format= "%m/%d/%Y") 
df2$Date <- as.Date (df2$Date, format= "%m/%d/%Y") 

df3 = merge(df1,df2) 
#   Date Duration Percent_Removal 
# 1 2014-06-27  10   20.39 
# 2 2014-06-30  20   27.01 
# 3 2014-07-11  15   59.48 

注意,沒有其他選項需要在MERGE語句中指定,因爲

  1. 默認值爲by =是兩者共同的數據幀中的列名。在這種情況下,只共享Date
  2. all.x,all.yall的缺省值給出了只保留兩個數據幀中的行的期望行爲。
+0

我很抱歉,實際上我的日期值存在一個小問題。我修復了它,現在合併功能正常工作。非常感謝你的幫助。 – Sami

0

你可能是超級懶惰,避免第三DF乾脆:

df1$Percent_removal<-df2$Percent_removal[df2$Date==df1$Date] 

這隻會是有效的,如果你只需要在每個DF每個日期的1個實例。一個更細緻的方法可能是涉及plyr軟件包。

+0

獲取錯誤消息:「較長的對象長度不是較短對象長度的倍數」 – Sami

相關問題