合并两个数据帧

时间:2012-10-17 19:15:23

标签: r merge dataframe

我有以下数据框:

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,...

然后,我可以使用合并功能并使用年份和国家合并它们(一对多)。

我试图按照上面的建议转换数据框。但是,我能想到的唯一方法是使用一些复杂的“for”循环。如果有人采用更简单的方法,我们将不胜感激。此外,如果您认为合并这两个数据帧可以更容易地完成,那也很棒。

1 个答案:

答案 0 :(得分: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值的情况下。