如何在特定条件下在R中的矩阵中查找行或列

How to find a row or column under specific conditions in a matrix in R

例如,如果我们有一个具有以下格式的矩阵或数组

如何找到其中只有10到20之间数字的行或列的索引?

M = array(c(1,1,12,34,0,19,15,1,0,17,12,0,21,1,11,1), dim=c(4,4))

而且,我也不允许使用 for 或 while 循环来执行此操作。 另一件事是矩阵或数组可能有超过 2 个维度。如果该方法也适用于多维矩阵或数组,对我来说会更好。谢谢。

与其试图找到符合条件的单个元素的索引,不如找到所有元素都在区间之间的那些行或列。

在这个例子中,我希望有一个结果告诉我第 3 行是这一行中所有数字都在 10 到 20 之间的行。

使用which(..., arr.ind = TRUE)。这里我假设 between 表示 10 和 20 不包含

which(M > 10 & M < 20, arr.ind = TRUE)
#      row col
# [1,]   3   1
# [2,]   2   2
# [3,]   3   2
# [4,]   2   3
# [5,]   3   3
# [6,]   3   4

这也适用于 3 维数组(及更高维)。

## Three dimensions
dim(M) <- c(2, 4, 2)
which(M > 10 & M < 20, arr.ind = TRUE)
#      dim1 dim2 dim3
# [1,]    1    2    1
# [2,]    2    3    1
# [3,]    1    4    1
# [4,]    2    1    2
# [5,]    1    2    2
# [6,]    1    4    2

## Four dimensions
dim(M) <- rep(2, 4)
which(M > 10 & M < 20, arr.ind = TRUE)
#      dim1 dim2 dim3 dim4
# [1,]    1    2    1    1
# [2,]    2    1    2    1
# [3,]    1    2    2    1
# [4,]    2    1    1    2
# [5,]    1    2    1    2
# [6,]    1    2    2    2

## ... and so on

注意:要包括10和20,只需使用M >= 10 & M <= 20

数据:

M <- structure(c(1, 1, 12, 34, 0, 19, 15, 1, 0, 17, 12, 0, 21, 1, 
11, 1), .Dim = c(4L, 4L))

更新: 从您的编辑中,您可以找到所有值都在 10 到 20 之间的行号

which(rowSums(M >= 10 & M <= 20) == ncol(M))
# [1] 3