R,选择矩阵的子集

时间:2015-02-24 21:39:01

标签: r

假设我有2个矩阵m和m.ind。第一个包含实际数据,而较小的一个包含行索引。

 m
            [,1]       [,2]       [,3]       [,4]
[1,]  0.23094453 -0.1379296  0.4173233 -1.7767756
[2,] -1.15772946 -0.1111935  1.0654023  0.6228674
[3,]  0.24707599 -0.6900143  0.9702020 -0.5222834
[4,] -0.09111356 -0.2217942 -0.1016292  1.3222310
[5,]  1.75737562  0.1829077  1.4032035 -0.3634403

 m.ind
     [,1] [,2] [,3] [,4]
[1,]    2    1    3    5
[2,]    2    2    4    4

我想创建一个矩阵m的子集,其行ID是矩阵m.ind的元素。

 m.sub
          [,1]       [,2]       [,3]       [,4]
[1,] -1.157729 -0.1379296  0.9702020 -0.3634403
[2,] -1.157729 -0.1111935 -0.1016292  1.3222310

我尝试了以下功能:

test=apply(m, 2, function(x) x[m.ind])

非常感谢您的协助。

1 个答案:

答案 0 :(得分:2)

您可以通过

生成子集m的索引
m.ind2 <- m.ind + nrow(m)*(col(m.ind)-1)

m.ind2 <- cbind(as.vector(m.ind),as.vector(col(m.ind)))

然后做:

matrix(m[m.ind2],nrow=nrow(m.ind))

此解决方案使用R中的matrix基本上是具有vector属性的dim这一事实。

以下是一个示例数据集:

set.seed(1)
m <- matrix(runif(20),ncol=4)
m.ind <- matrix(c(2,2,1,2,3,4,5,4),nrow=2)

并输出:

          [,1]      [,2]      [,3]      [,4]
[1,] 0.3721239 0.8983897 0.6870228 0.7774452
[2,] 0.3721239 0.9446753 0.3841037 0.3800352