我有以下数据框:
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,...
Run Code Online (Sandbox Code Playgroud)
最后,我想将此数据框与另一个看起来像这样的数据框合并:
Year,Country,Exp,...
1969,Austria,1,...
1970,Austria,0,...
1969,Germany,0,...
1970,Germany,1,...
Run Code Online (Sandbox Code Playgroud)
我看到它的方式,我将不得不将第一个数据框更改为以下格式:
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,...
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用合并功能并使用年份和国家合并它们(一对多).
我试图按照上面的建议转换数据框.但是,我能想到的唯一方法是使用一些复杂的"for"循环.如果有人采用更简单的方法,我们将不胜感激.此外,如果您认为合并这两个数据帧可以以更容易的方式完成,这也很好.
您需要融化的第一个数据框架.
library(reshape)
melt(dat, id.vars="Date,Year") # may need to add ...,c())
Run Code Online (Sandbox Code Playgroud)
重命名新列以匹配您的其他data.frame.
然后合并(或者您可能更喜欢使用plyr包加入)
merge(dat,dat2, by=c("Date","Country"))
Run Code Online (Sandbox Code Playgroud)
要么:
library(plyr)
join(dat,dat2, by=c("Date","Country"))
Run Code Online (Sandbox Code Playgroud)
我更喜欢连接函数,因为它比合并更直观,特别是在有NA值的情况下.