给定具有相同列数的向量,如何 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
我有一个包含 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