2012-10-17 262 views
6

,我有以下的數據幀:合併兩個數據幀

Date,Year,Austria,Germany,... 
1969-12-31,1969,96.743,95.768,... 
1970-01-30,1970,95.515,95.091,... 
1970-02-27,1970,95.075,95.235,... 

最後,我想合併這些數據幀與另外一個看起來是這樣的:我看到的方式

Year,Country,Exp,... 
1969,Austria,1,... 
1970,Austria,0,... 
1969,Germany,0,... 
1970,Germany,1,... 

它,我將不得不將第一個數據幀更改爲以下格式:

Date,Year,Country,Exp,… 
1969-12-31,1969,Austria,96.743,... 
1970-01-30,1970,Austria,95.515,... 
1970-02-27,1970,Austria,95.075,... 
1969-12-31,1969,Germany,95.768,... 
1970-01-30,1970,Germany,95.091,... 
1970-02-27,1970,Germany,95.235,... 

然後,我可以使用合併函數並使用Year and Country合併它們(一對多)。

我試圖按照上面的建議轉換數據幀。但是,我能想到的唯一方法是使用一些複雜的「for」循環。如果有人有一個更簡單的方法,將不勝感激。此外,如果您認爲合併這兩個數據框可以以更簡單的方式完成,那也將非常棒。

+0

我認爲reshape函數或reshape2包會做到這一點。 –

回答

5

您需要融化的第一個數據框。

library(reshape) 
melt(dat, id.vars="Date,Year") # may need to add ...,c()) 

重命名新列以匹配其他data.frame。

然後合併(或您可能更願意加入,使用plyr包)

merge(dat,dat2, by=c("Date","Country")) 

或:

library(plyr) 
join(dat,dat2, by=c("Date","Country")) 

我更喜歡加入的功能,因爲它的作用遠遠超過合併更直觀,特別是在有NA值的情況下。

+0

非常感謝!這正是我需要的! – rp1

+0

這可能在r中使用基礎包嗎? – AngryPanda