2012-10-17 50 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