如何为每行的不同列位置的矩阵进行子集化?

时间:2015-11-05 10:34:25

标签: r matrix subset

我想为每一行使用不同的(但是一列)列化矩阵。那么适当的应用可以做到这一点吗?但也可能聪明的子集可以工作,但我还没有找到解决方案。计算时间是一个问题 - 我有一个带有for循环的解决方案,但是在RAM中加载矩阵几次太慢了。 这是一个例子:

给出矩阵M和向量v,

M<-matrix(1:15,nrow=5,ncol=3)

     [,1] [,2] [,3]
[1,]    1    6   11
[2,]    2    7   12
[3,]    3    8   13
[4,]    4    9   14
[5,]    5   10   15

v<-c(3,1,1,2,1)

,解决方案应为:

(11,2,3,9,5)

2 个答案:

答案 0 :(得分:5)

我们可以尝试行/列索引

M[cbind(1:nrow(M), v)]
#[1] 11  2  3  9  5

答案 1 :(得分:3)

只是为了好玩,这是使用矢量索引的另一种解决方案

t(M)[v + (seq_len(nrow(M)) - 1) * ncol(M)]
# [1] 11  2  3  9  5