说我有一些矩阵,例如:

> m = matrix(rep(c(0, 0, 1), 4), nrow = 4)
> m
     [,1] [,2] [,3]
[1,]    0    0    1
[2,]    0    1    0
[3,]    1    0    0
[4,]    0    0    1

如果运行which,我会得到普通索引的列表:
> which(m == 1)
[1]  3  6  9 12

我想得到类似矩阵索引的东西-每个索引包含行号和列号:
     [,1] [,2]
[1,]    3    1
[2,]    2    2
[3,]    1    3
[4,]    4    3

是否有任何简单的功能可以做到这一点? 此外,它应该以某种方式包含行和列的名称:
> rownames(m) = letters[1:4]
> colnames(m) = letters[5:7]
> m
  e f g
a 0 0 1
b 0 1 0
c 1 0 0
d 0 0 1

但我现在不知道如何
     [,1] [,2] [,3] [,4]
[1,]    3    1    c    e
[2,]    2    2    b    f
[3,]    1    3    a    g
[4,]    4    3    d    g

或者,可能返回2个 vector (用于行和列),例如
c b a d
3 2 1 4

e f g g
1 2 3 3

最佳答案

对于第一个问题,您还需要将arr.ind= TRUE传递给which:

> which(m == 1, arr.ind = TRUE)
     row col
[1,]   3   1
[2,]   2   2
[3,]   1   3
[4,]   4   3

关于r - `which()`函数,用于矩阵索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7507765/

10-13 07:24