我有一个包含多个平方数据框的列表,每个数据框代表一个国家的经济。我想将单个数据框中的所有数据框与对应于相同列和行名称的对角单元格上每个国家/地区的数据组合起来。
这是一个玩具设置:
# toy IO
df1 <- data.frame (a1=rnorm(3),
b1=rnorm(3)+2,
c1=rnorm(3)*2)
rownames(df1) <- colnames(df1)
df2 <- data.frame (a2=rnorm(3),
b2=rnorm(3)+5,
c2=rnorm(3)*5)
rownames(df2) <- colnames(df2)
df3 <- data.frame (a3=rnorm(3),
b3=rnorm(3)+10,
c3=rnorm(3)*10)
rownames(df3) <- colnames(df3)
IO <- list(df1,df2,df3)
# initialize the MRIO
# 3*3=9
bigmat <- matrix(NA, 9,9)
dim(bigmat)
bigmat <- as.data.frame(bigmat)
# input row and col names
colnames(bigmat) <- c(colnames(df1),colnames(df2),colnames(df3))
rownames(bigmat) <- colnames(bigmat)
这就是我理想中想要的。当然,在最初的问题中,我有 214 个变量 x 25 个数据帧,所以我想要一个自动化的解决方案。
这是
for()
循环的好时机。您可以通过列表中数据框的行和列名称分配给大矩阵,IO
。
for (dat in IO) bigmat[rownames(dat), colnames(dat)] <- dat
bigmat
# a1 b1 c1 a2 b2 c2 a3 b3 c3
# a1 -0.7022840 0.8113511 0.947473 NA NA NA NA NA NA
# b1 -1.3965466 1.1572675 1.251534 NA NA NA NA NA NA
# c1 -0.7046801 2.4452599 -1.759129 NA NA NA NA NA NA
# a2 NA NA NA -0.02525984 4.706425 -2.7166644 NA NA NA
# b2 NA NA NA -0.99340937 4.087659 -2.2857446 NA NA NA
# c2 NA NA NA 1.14106869 6.175546 -0.5993501 NA NA NA
# a3 NA NA NA NA NA NA 2.11147819 10.124772 -1.458151
# b3 NA NA NA NA NA NA 0.95736185 8.755218 2.136663
# c3 NA NA NA NA NA NA 0.01153827 9.380493 2.745363