r语言 - 其中 (arr.ind = TRUE) 不适用于 %in%



以下面的矩阵为例,我想找到一些值的数组下标。

set.seed(123)
mat <- matrix(sample(1:5, 15, TRUE), 5, 3)
#      [,1] [,2] [,3]
# [1,]    3    5    5
# [2,]    3    4    3
# [3,]    2    1    3
# [4,]    2    2    1
# [5,]    3    3    4

如果它是一个单一的值,比如2,那么我可以使用which(..., arr.ind = TRUE)来找到坐标。

which(mat == 2, arr.ind = TRUE)
#      row col
# [1,]   3   1
# [2,]   4   1
# [3,]   4   2

然而,如果我想找到与一组值匹配的位置,比如c(1, 2),代码会给我一个向量索引。

which(mat %in% 1:2, arr.ind = TRUE)
# [1]  3  4  8  9 14

我怎么能把它转换成一个2列的形式,表示行和列从矩阵?

原因是==保持了基体的结构,而%in%失去了基体的结构。

mat == 2
#       [,1]  [,2]  [,3]
# [1,] FALSE FALSE FALSE
# [2,] FALSE FALSE FALSE
# [3,]  TRUE FALSE FALSE
# [4,]  TRUE  TRUE FALSE
# [5,] FALSE FALSE FALSE
mat %in% 2
# [1] FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

您可以使用arrayInd()将矢量索引转换为矩阵中相应的行和列

arrayInd(which(mat %in% 1:2), dim(mat))

或将mat %in% 1:2变回矩阵以使which(arr.ind = TRUE)工作。

which(array(mat %in% 1:2, dim(mat)), arr.ind = TRUE)

两个输出

#      row col
# [1,]   3   1
# [2,]   4   1
# [3,]   3   2
# [4,]   4   2
# [5,]   4   3

相关内容

  • 没有找到相关文章

最新更新