R 如何使用矩阵上的which()来获取唯一索引

R 如何使用矩阵上的which()来获取唯一索引,r,matrix,R,Matrix,假设我有一个对称矩阵: > mat <- matrix(c(1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0), ncol=4, nrow=4) > mat [,1] [,2] [,3] [,4] [1,] 1 0 1 0 [2,] 0 0 1 0 [3,] 1 1 0 0 [4,] 0 0 0 0 现在的问题是:我怎么不考虑复制细胞?正如生成的索引矩阵所示

假设我有一个对称矩阵:

> mat <- matrix(c(1,0,1,0,0,0,1,0,1,1,0,0,0,0,0,0), ncol=4, nrow=4)
> mat
     [,1] [,2] [,3] [,4]
[1,]    1    0    1    0
[2,]    0    0    1    0
[3,]    1    1    0    0
[4,]    0    0    0    0
现在的问题是:我怎么不考虑复制细胞?正如生成的索引矩阵所示,第2行和第4行分别指向(3,1)和(1,3),这是同一个单元格

我如何避免这种情况?我只需要每个单元格有一个引用,即使矩阵是对称的。有没有一个简单的方法来处理这种情况

编辑:

我曾考虑使用
upper.tri
lower.tri
,但在这种情况下,我得到的是矩阵的向量版本,我无法回到(行,列)表示法

> which(mat[upper.tri(mat)]==1, arr.ind=T)
[1] 2 3
编辑二

预期输出类似于(行,列)和(列,行)对上的唯一输出:


既然你有对称矩阵,你就可以

which(mat == 1 & upper.tri(mat, diag = TRUE), arr.ind = TRUE)

#     row col
#[1,]   1   1
#[2,]   1   3
#[3,]   2   3


您能复制并粘贴您的预期输出吗?@NelsonGon请查看我的编辑II@markus,好的,它们不是我想要的,因为矩阵是对称的,我不需要两次相同的结果,因为它是多余的。@Henrik,这正是我想要的!非常感谢。
     row col
[1,]   1   1
[2,]   3   1
[3,]   3   2
which(mat == 1 & upper.tri(mat, diag = TRUE), arr.ind = TRUE)

#     row col
#[1,]   1   1
#[2,]   1   3
#[3,]   2   3
which(mat == 1 & lower.tri(mat, diag = TRUE), arr.ind = TRUE)