给定具有相同列数的向量,如何 select 矩阵的元素?

How to select elements of a matrix given a vector with same number of columns?

我有一个包含 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 个 row/column 个索引来提取。列顺序可以是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 选项(但效率不如

> 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