我相信这里有一个类似的问题,但我似乎无法再找到它了。
我有两个不同尺寸的矩阵,我想要对它们进行均衡,以便我可以将它们组合在一个数组中。
例如,我有以下两个矩阵:
a <- matrix(1:6, 3, 2)
b <- matrix(1:12, 4, 3)
a
[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
b
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
因为我正在使用时间序列数据,所以我希望添加的行/列中包含NA。在我的例子中,矩阵a将得到一个额外的列和一个仅包含NA的额外行,如下所示:
[,1] [,2] [,3]
[1,] 1 4 NA
[2,] 2 5 NA
[3,] 3 6 NA
[4,] NA NA NA
在我的数据集中,我将有79个矩阵尺寸不等的矩阵,我需要使它们与尺寸最大的矩阵一样大。
答案 0 :(得分:1)
由于您只想使用NA
扩展小矩阵,我们可以使用一种简单的方法,例如:
创建一个与b
一样大的矩阵,只有NA
。代码:
extended.a = matrix(NA,nrow(b),ncol(b))
使用a
中的值填充此矩阵。代码:
extended.a[cbind(rep(1:nrow(a),ncol(a)), rep(1:ncol(a),each=nrow(a)))] = a
修改强>
根据Roland的建议,您还可以使用which(..., arr.ind=TRUE)
获取索引向量。
例如,which(TRUE | a, arr.ind=TRUE)
甚至:which(matrix(TRUE,nrow(a),ncol(a), arr.ind=TRUE)
或者更好,使用expand.grid
函数:expand.grid(1:nrow(a), 1:ncol(a))
答案 1 :(得分:1)
如果b
是最大的矩阵,您可以创建一个与b
具有相同尺寸的矩阵,填充NA
,并替换与较小矩阵对应的行和列{ {1}}的值为a
:
a
使用多个矩阵的示例,我们找到最大的矩阵并填充所有矩阵a2 <- "[<-"(x = matrix(NA, nrow = nrow(b), ncol = ncol(b)),
i = 1:nrow(a), j = 1:ncol(a),
value = a)
a2
# [,1] [,2] [,3]
# [1,] 1 4 NA
# [2,] 2 5 NA
# [3,] 3 6 NA
# [4,] NA NA NA
以匹配最大的矩阵。
NA