which(arr.ind = TRUE) 不适用于 %in%
which(arr.ind = TRUE) doesn't work with %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
以下面的矩阵为例,我想找到一些值的数组索引。
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