根据R中的条件得到对称矩阵坐标

wol*_*oor 1 boolean-logic r matrix dataframe

在R中,我有一个对称矩阵或数据帧,无论更简单 df.

我想获得(row name, column name)矩阵中元素> = 0.90的所有对.但是,我想排除对角线元素.此外,我希望元素在(x,y)与(y,x)相同的意义上是唯一的

例如:

df
   A      B     C       D    E
A   1    0.4    0.4    0.1  0.9
B  0.4   1      0.4    0.4  0.1
C  0.4   0.4    1      0.1  0.3
D  0.1   0.4    0.1     1   0.1
E  0.9   0.1    0.3    0.1   1
Run Code Online (Sandbox Code Playgroud)

我想要的只是

(E,A)或(A,E)(只需要其中一个).

MrF*_*ick 5

假设你有一个类似的测试矩阵

mm <- structure(c(1, 0.4, 0.4, 0.1, 0.9, 0.4, 1, 0.4, 0.4, 0.1, 0.4, 
0.4, 1, 0.1, 0.3, 0.1, 0.4, 0.1, 1, 0.1, 0.9, 0.1, 0.3, 0.1, 
1), .Dim = c(5L, 5L), .Dimnames = list(c("A", "B", "C", "D", 
"E"), c("A", "B", "C", "D", "E")))
Run Code Online (Sandbox Code Playgroud)

您可以获取符合条件的行/列的索引

idx <- which(mm>=.9 & lower.tri(mm), arr.ind=TRUE)
Run Code Online (Sandbox Code Playgroud)

然后你可以得到名字

cbind(rownames(mm)[idx[,1]], colnames(mm)[idx[,2]])

#      [,1] [,2]
# [1,] "E"  "A" 
Run Code Online (Sandbox Code Playgroud)