我有以下几组数据:

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,因此请考虑在内。

最佳答案

尝试

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

10-04 22:18
查看更多