r-在给定列数相同的向量的情况下,如何选择矩阵的元素



我有一个5行4列的矩阵和一个4元素的向量。我想提取矩阵中的4个元素,其中对应的向量值是该矩阵元素的行索引。

这是我的数据:

mat1.data <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20)
mat1 <- matrix(mat1.data,nrow=5,ncol=4,byrow=TRUE)
mat1
vec1<-c(4,2,5,1)

我试图得到的输出是:

c(13,6,19,4)

我们可以构造一个行/列索引的matrix来提取。列序列可以是seq_len(ncol

mat1[cbind(vec1, seq_len(ncol(mat1)))]
[1] 13  6 19  4

或者另一种选择是提取rows并使用diag

diag(mat1[vec1,])
[1] 13  6 19  4

使用mapply+asplit的另一个基本R选项(但不如@akrun的diag解决方案有效(

> mapply(`[[`, asplit(mat1, 2), vec1)
[1] 13  6 19  4

seq+nrow+ncol

> mat1[(seq(ncol(mat1)) - 1) * nrow(mat1) + vec1]
[1] 13  6 19  4

最新更新