将df重塑为数据面板模型

时间:2015-09-11 20:12:38

标签: r

我有以下几组数据:

df1 <- data.frame( country = c("A", "B","A","B"), year = c(2011,2011,2012,2012), variable_1= c(1,3,5,7))    

df2 <- data.frame( country = c("A", "B","A","B"), year = c(2011,2012,2012,2013), variable_2= c(2,4,6,8))

df3 <- data.frame( country = c("A", "C","C"), year = c(2011,2011,2013), variable_3= c(9,9,9))

我想将它们重塑为面板数据模型,因此我可以得到以下结果:

df4 <- data.frame( country = c("A","A","A","B","B","B","C","C","C"), year = c(2011,2012,2013,2011,2012,2013,2011,2012,2013), variable_1 = c(1,5,NA,3,7,NA,NA,NA,NA), variable_2 = c(2,6,NA,NA,4,8,NA,NA,NA), variable_3 = c(9,NA,NA,NA,NA,NA,9,NA,9) )

我搜索了这个信息,但我找到的主题(Reshaping panel data)对我没有帮助。

关于如何做到这一点的任何想法?我的真实数据集有数千行(“国家”),几个变量,年份和NA,所以请考虑到这一点。

1 个答案:

答案 0 :(得分:5)

尝试

library(tidyr)
library(dplyr)

Reduce(full_join, list(df1, df2, df3)) %>% 
  complete(country, year)

给出了:

#Source: local data frame [9 x 5]
#
#  country  year variable_1 variable_2 variable_3
#    (chr) (dbl)      (dbl)      (dbl)      (dbl)
#1       A  2011          1          2          9
#2       A  2012          5          6         NA
#3       A  2013         NA         NA         NA
#4       B  2011          3         NA         NA
#5       B  2012          7          4         NA
#6       B  2013         NA          8         NA
#7       C  2011         NA         NA          9
#8       C  2012         NA         NA         NA
#9       C  2013         NA         NA          9