均衡矩阵在abind R中组合

时间:2014-03-19 17:38:07

标签: arrays r matrix

我相信这里有一个类似的问题,但我似乎无法再找到它了。

我有两个不同尺寸的矩阵,我想要对它们进行均衡,以便我可以将它们组合在一个数组中。

例如,我有以下两个矩阵:

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个矩阵尺寸不等的矩阵,我需要使它们与尺寸最大的矩阵一样大。

2 个答案:

答案 0 :(得分:1)

由于您只想使用NA扩展小矩阵,我们可以使用一种简单的方法,例如:

  1. 创建一个与b一样大的矩阵,只有NA。代码:

    extended.a = matrix(NA,nrow(b),ncol(b))

  2. 使用a中的值填充此矩阵。代码:

    extended.a[cbind(rep(1:nrow(a),ncol(a)), rep(1:ncol(a),each=nrow(a)))] = a

  3. 修改

    根据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