【发布时间】:2017-02-22 21:05:43
【问题描述】:
我正在尝试用较小的矩阵填充一个大矩阵。
假设我有 2 个矩阵:
set.seed(1)
mat1 <- matrix(rnorm(100*20),nrow=100,ncol=20)
rownames(mat1) <- paste("R1",1:100,sep=".")
colnames(mat1) <- paste("F1",1:20,sep=".")
mat2 <- matrix(rnorm(200*10),nrow=200,ncol=10)
rownames(mat2) <- paste("R2",1:200,sep=".")
colnames(mat2) <- paste("F2",1:10,sep=".")
我需要创建的大矩阵将包含mat1 和mat2 中所有行的组合,其列数将为ncol(mat1)+ncol(mat2):
combined.rownames <- expand.grid(rownames(mat1),rownames(mat2))
big.mat <- matrix(NA,nrow=nrow(mat1)*nrow(mat2),ncol=ncol(mat1)+ncol(mat2))
rownames(big.mat) <- paste(combined.rownames$Var1,combined.rownames$Var2,sep="_")
mat1 将填充big.mat 中与1:ncol(mat1) 列中对应的所有行:
idx1 <- match(combined.rownames$Var1,rownames(mat1))
big.mat[,1:ncol(mat1)] <- mat1[idx1,]
而mat2 将填充big.mat 中与(ncol(mat1)+1):(ncol(mat1)+ncol(mat2)) 列中对应的所有行:
idx2 <- match(combined.rownames$Var2,rownames(mat2))
big.mat[,(ncol(mat1)+1):(ncol(mat1)+ncol(mat2))] <- mat2[idx2,]
实际上我有一个矩阵列表:mat1、mat2、...、matn,它们的维度比这个例子中的要高。
我的问题是是否有更快/更有效的方式来填充big.mat?
请注意,我的矩阵不是稀疏的。
【问题讨论】: