如何按行和列组合多个数据框?

问题描述 投票:0回答:1

我有一个包含多个平方数据框的列表,每个数据框代表一个国家的经济。我想将单个数据框中的所有数据框与对应于相同列和行名称的对角单元格上每个国家/地区的数据组合起来。

这是一个玩具设置:

# 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 个数据帧,所以我想要一个自动化的解决方案。

enter image description here

r merge io
1个回答
0
投票

这是

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
© www.soinside.com 2019 - 2024. All rights reserved.