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)