在 R 语言中,如何使用哪个函数查找矩阵中值的列索引和行索引?


要查找矩阵中值的行列索引,我们不能简单地使用 which 函数,因为它返回基于矩阵中数字序列的索引。例如,如果我们有一个如下所示的矩阵 M:

1 2 3
4 1 6
7 8 1

现在,如果我们尝试使用 which(M==1) 查找索引,它将返回 1 5 9

因为 1 出现在第 1、5 和 9 个位置。

因此,我们需要使用 arr.ind = TRUE,以便 which 函数可以将矩阵读取为数组。

示例

考虑以下矩阵:

 实时演示

> M<-matrix(sample(1:10,100,replace=TRUE),nrow=10)
> M

输出

[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 9 5 4 5 2 7 6 7 1 1
[2,] 2 6 5 4 2 4 6 4 4 8
[3,] 10 4 9 10 8 4 4 4 5 5
[4,] 8 2 5 10 4 1 3 10 5 8
[5,] 10 1 8 9 10 10 3 8 6 10
[6,] 4 3 4 8 8 4 9 1 9 7
[7,] 5 8 1 5 5 9 9 10 8 7
[8,] 9 9 9 5 5 9 7 2 5 2
[9,] 5 6 5 6 8 9 9 10 1 9
[10,] 7 1 1 6 8 9 5 1 2 4

在矩阵 M 中查找 1 到 10 的值的索引:

示例

> which(M==1,arr.ind=TRUE)

输出

row col
[1,] 5 2
[2,] 10 2
[3,] 7 3
[4,] 10 3
[5,] 4 6
[6,] 6 8
[7,] 10 8
[8,] 1 9
[9,] 9 9
[10,] 1 10
> which(M==2,arr.ind=TRUE)

输出

row col
[1,] 2 1
[2,] 4 2
[3,] 1 5
[4,] 2 5
[5,] 8 8
[6,] 10 9
[7,] 8 10
> which(M==3,arr.ind=TRUE)

输出

row col
[1,] 6 2
[2,] 4 7
[3,] 5 7
> which(M==4,arr.ind=TRUE)

输出

row col
[1,] 6 1
[2,] 3 2
[3,] 1 3
[4,] 6 3
[5,] 2 4
[6,] 4 5
[7,] 2 6
[8,] 3 6
[9,] 6 6
[10,] 3 7
[11,] 2 8
[12,] 3 8
[13,] 2 9
[14,] 10 10
> which(M==5,arr.ind=TRUE)

输出

row col
[1,] 7 1
[2,] 9 1
[3,] 1 2
[4,] 2 3
[5,] 4 3
[6,] 9 3
[7,] 1 4
[8,] 7 4
[9,] 8 4
[10,] 7 5
[11,] 8 5
[12,] 10 7
[13,] 3 9
[14,] 4 9
[15,] 8 9
[16,] 3 10
> which(M==6,arr.ind=TRUE)

输出

row col
[1,] 2 2
[2,] 9 2
[3,] 9 4
[4,] 10 4
[5,] 1 7
[6,] 2 7
[7,] 5 9
> which(M==7,arr.ind=TRUE)

输出

row col
[1,] 10 1
[2,] 1 6
[3,] 8 7
[4,] 1 8
[5,] 6 10
[6,] 7 10

示例

> which(M==8,arr.ind=TRUE)

输出

row col
[1,] 4 1
[2,] 7 2
[3,] 5 3
[4,] 6 4
[5,] 3 5
[6,] 6 5
[7,] 9 5
[8,] 10 5
[9,] 5 8
[10,] 7 9
[11,] 2 10
[12,] 4 10
> which(M==9,arr.ind=TRUE)

输出

row col
[1,] 1 1
[2,] 8 1
[3,] 8 2
[4,] 3 3
[5,] 8 3
[6,] 5 4
[7,] 7 6
[8,] 8 6
[9,] 9 6
[10,] 10 6
[11,] 6 7
[12,] 7 7
[13,] 9 7
[14,] 6 9
[15,] 9 10
> which(M==10,arr.ind=TRUE)

输出

row col
[1,] 3 1
[2,] 5 1
[3,] 3 4
[4,] 4 4
[5,] 5 5
[6,] 5 6
[7,] 4 8
[8,] 7 8
[9,] 9 8
[10,] 5 10

更新于: 2020年9月7日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告