我有一个包含多个平方框架的列表,每个框架代表一个国家的经济.我想将所有收件箱合并到一个收件箱中,并将每个国家的数据放在对应相同列和行名称的对角线单元中.

这是一个玩具设置:

# 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个变量乘25个预设,所以我希望有一个自动化的解决方案.

enter image description here

推荐答案

在矩阵中使用bdiag. 请注意,Matrix随附R,因此不需要安装.如果您喜欢"dgCMatrix"类的稀疏矩阵,则省略外部as.matrix.如果已知IO的组件具有相同的尺寸,则可以省略unlist(但如果您将其留在其中也不会有什么坏处).

library(Matrix)
m <- as.matrix(do.call(bdiag, lapply(IO, as.matrix)))
rownames(m) <- unlist(sapply(IO, rownames))
colnames(m) <- unlist(sapply(IO, colnames))
m

魔法包中的adiag也有效:

library(magic)

m <- do.call(adiag, lapply(IO, as.matrix))
rownames(m) <- unlist(sapply(IO, rownames))
colnames(m) <- unlist(sapply(IO, colnames))

m

上述任何一种方法都给出

           a1       b1         c1         a2       b2         c2         a3        b3        c3
a1 -0.1513960 1.228208  0.8691008  0.0000000 0.000000  0.0000000  0.0000000  0.000000  0.000000
b1  0.3297912 2.286549  1.6003537  0.0000000 0.000000  0.0000000  0.0000000  0.000000  0.000000
c1 -3.2273228 0.779488 -0.3278619  0.0000000 0.000000  0.0000000  0.0000000  0.000000  0.000000
a2  0.0000000 0.000000  0.0000000  1.2429188 5.403631  0.1442195  0.0000000  0.000000  0.000000
b2  0.0000000 0.000000  0.0000000 -0.9343851 4.113563 -2.1606490  0.0000000  0.000000  0.000000
c2  0.0000000 0.000000  0.0000000  0.3937087 3.681062  8.4493626  0.0000000  0.000000  0.000000
a3  0.0000000 0.000000  0.0000000  0.0000000 0.000000  0.0000000  1.2283928  9.479131 16.858872
b3  0.0000000 0.000000  0.0000000  0.0000000 0.000000  0.0000000  0.2760235 11.623203 -2.416898
c3  0.0000000 0.000000  0.0000000  0.0000000 0.000000  0.0000000 -1.0489755  8.929932 -4.682005

 

注意

IO <- list(
  data.frame(
    a1 = c(-0.15139596233578126, 0.3297912007577342, -3.2273228297675036),
    b1 = c(1.2282082287538416, 2.286548567354287, 0.7794880176338643),
    c1 = c(0.8691007542260557, 1.6003537316708585, -0.32786193728595037),
    row.names = c("a1", "b1", "c1")
  ),
  data.frame(
    a2 = c(1.2429187749373165, -0.9343850580551597, 0.39370865221579254),
    b2 = c(5.403631455697291, 4.113563283583199, 3.6810623964633677),
    c2 = c(0.14421954258220337, -2.1606489673566616, 8.449362593227988),
    row.names = c("a2", "b2", "c2")
  ),
  data.frame(
    a3 = c(1.228392782136422, 0.27602347826588974, -1.0489755044730924),
    b3 = c(9.479130656167058, 11.623202521730665, 8.929931770655703),
    c3 = c(16.858872442051617, -2.416897677389497, -4.682004786404757),
    row.names = c("a3", "b3", "c3")
  )
)

R相关问答推荐

使用%in%时如何应用多个条件?

pdf Quarto中的中心美人鱼

将收件箱变量传递给ggplot 2函数

使用格式化程序自定义hc_tooltip以添加textColor删除了我的标记并try 将它们带回失败

给定R中另一行中的值,如何插补缺失值

是否可以 Select 安装不带文档的R包以更有效地存储?

R形式的一维数字线/箱形图样式图表

计算R中的威布尔分布的EDF

R:更新后无法运行控制台

使用gggrassure减少地块之间的空间

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

将嵌套列表子集化为嵌套列表

IMF IFS数据以R表示

汇总数据表中两个特定列条目的值

如何使用ggplot对堆叠条形图进行嵌套排序?

合并后返回列表的数据帧列表

自定义gggraph,使geom_abline图层仅在沿x轴的特定范围内显示

在gggraph中显示来自不同数据帧的单个值

多元正态分布的计算