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

时间:2015-08-30 23:09:17

标签: arrays r matrix find row

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

我们怎样才能找到内部或列之间只有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之间。

1 个答案:

答案 0 :(得分:3)

使用which(..., arr.ind = TRUE)。这里我假设之间的意味着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

这也适用于三维数组(及更高版本)。

## 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