R语言中如何将不同维度方阵合并为维度相加的新方阵
在R语言中合并两个不同维度的方阵
没问题,这在R里其实很容易实现,核心思路就是先创建一个对应大小的全零矩阵,再把两个原矩阵分别放到左上角和右下角的位置,还能保留原来的行名列名哦!
步骤示例(以你的小矩阵为例)
首先补全你给出的示例代码,定义好两个带行名列名的矩阵:
# 定义5x5的矩阵a a <- matrix(sample(0:1, 25, replace=T), nrow=5, ncol=5) rownames(a) <- letters[1:5] colnames(a) <- letters[1:5] # 定义4x4的矩阵b b <- matrix(rep(0,16 ), nrow=4, ncol=4) rownames(b) <- letters[6:9] colnames(b) <- letters[6:9]
接下来按照以下步骤合并:
- 计算合并后大矩阵的总维度
- 创建全零的大矩阵,并设置好合并后的行名列名
- 将原矩阵填充到大矩阵的对应位置
具体代码如下:
# 计算总维度(因为是方阵,行数=列数) total_dim <- nrow(a) + nrow(b) # 创建全零大矩阵,同时合并行名和列名 combined_mat <- matrix(0, nrow = total_dim, ncol = total_dim, dimnames = list(c(rownames(a), rownames(b)), c(colnames(a), colnames(b)))) # 将a填充到大矩阵的左上角 combined_mat[1:nrow(a), 1:ncol(a)] <- a # 将b填充到大矩阵的右下角 combined_mat[(nrow(a)+1):total_dim, (ncol(a)+1):total_dim] <- b
执行完后,combined_mat就是你想要的9x9矩阵,a在左上角区域,b在右下角区域,其余位置都是0。
推广到你的实际场景(392×392和497×497矩阵)
如果你已经有了这两个大矩阵(假设分别叫mat392和mat497),直接套用上面的逻辑就行:
# 计算总维度:392+497=889 total_dim <- nrow(mat392) + nrow(mat497) # 创建全零大矩阵(如果不需要行名列名可以去掉dimnames参数) final_mat <- matrix(0, nrow = total_dim, ncol = total_dim, dimnames = list(c(rownames(mat392), rownames(mat497)), c(colnames(mat392), colnames(mat497)))) # 填充两个原矩阵 final_mat[1:nrow(mat392), 1:ncol(mat392)] <- mat392 final_mat[(nrow(mat392)+1):total_dim, (ncol(mat392)+1):total_dim] <- mat497
这样就能得到你需要的889×889的矩阵啦!
内容的提问来源于stack exchange,提问作者ModalBro
相关产品推荐
相关产品推荐

