【发布时间】:2015-11-18 21:49:10
【问题描述】:
我想将相关矩阵转换为成对表(删除自匹配和重复)。
这是一个示例数据集。
rmat.test<-structure(c(1, 0.861194908618927, 0.826931774616241, 0.796892821788788,
0.83096307516098, 0.861194908618927, 1, 0.878752708435059, 0.855243384838104,
0.880544185638428, 0.826931774616241, 0.878752708435059, 1, 0.850607931613922,
0.850719928741455, 0.796892821788788, 0.855243384838104, 0.850607931613922,
1, 0.876053333282471, 0.83096307516098, 0.880544185638428, 0.850719928741455,
0.876053333282471, 1), .Dim = c(5L, 5L), .Dimnames = list(c("A",
"B", "C", "D", "E"), c("A", "B", "C", "D", "E")))
来自上一篇文章的回答。我有以下代码。
df.corr.pw<-reshape2::melt( cbind(
V1=rownames(rmat.test),
as.data.frame(rmat.test))
)
df.corr.pw<-subset(df.corr.pw,value!=1)
但是,我无法找到删除重复条目的有效方法(即 A-B 的第 2 行,B-A 的第 6 行)。
> df.corr.pw
V1 variable value
2 B A 0.8611949
3 C A 0.8269318
4 D A 0.7968928
5 E A 0.8309631
6 A B 0.8611949
8 C B 0.8787527
9 D B 0.8552434
10 E B 0.8805442
11 A C 0.8269318
12 B C 0.8787527
14 D C 0.8506079
15 E C 0.8507199
16 A D 0.7968928
17 B D 0.8552434
18 C D 0.8506079
20 E D 0.8760533
21 A E 0.8309631
22 B E 0.8805442
23 C E 0.8507199
24 D E 0.8760533
我已经尝试过仅使用upper.triangle,但我不知道如何保留和使用行名。
rmat.up<-rmat.test[upper.tri(rmat.test)]
# below yields NULL
rownames(rmat.test[upper.tri(rmat.test)])
谢谢,感谢任何帮助。
【问题讨论】: