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)(只需要其中一个).
假设你有一个类似的测试矩阵
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)