如何按行列合并DataFrame?实现多国经济对角矩阵自动化合并
自动化合并对角块DataFrame解决方案
方法1:Base R 循环实现(无需额外包)
# 假设你的数据列表名为IO,包含25个214×214的方阵DataFrame # 获取单个方阵的维度(因是方阵,取行数即可) block_size <- nrow(IO[[1]]) num_blocks <- length(IO) total_size <- block_size * num_blocks # 初始化全NA的大DataFrame big_df <- as.data.frame(matrix(NA, nrow = total_size, ncol = total_size)) # 批量生成并设置行列名 all_colnames <- unlist(lapply(IO, colnames)) colnames(big_df) <- all_colnames rownames(big_df) <- all_colnames # 循环填充每个对角区域 for (i in 1:num_blocks) { start <- (i - 1) * block_size + 1 end <- i * block_size big_df[start:end, start:end] <- IO[[i]] }
方法2:用Matrix包快速生成(代码更简洁)
library(Matrix) # 把列表里的DataFrame转成矩阵,直接生成对角块矩阵 big_block_matrix <- block.diag(lapply(IO, as.matrix)) # 转成DataFrame并设置行列名 big_df <- as.data.frame(as.matrix(big_block_matrix)) all_colnames <- unlist(lapply(IO, colnames)) colnames(big_df) <- all_colnames rownames(big_df) <- all_colnames
说明
- 两种方法都能自动适配你的25个214×214方阵场景,不需要手动计算维度或指定位置。
- 行列名会自动从每个小DataFrame提取并按顺序拼接,和对角块位置完全对应。
内容的提问来源于stack exchange,提问作者fiodeno
相关产品推荐
相关产品推荐

