如何在特定条件下在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
例如,如果我们有一个具有以下格式的矩阵或数组
如何找到其中只有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