假设我有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])
非常感谢您的协助。
答案 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