gpt4 book ai didi

R - 将相关矩阵转换为成对矩阵

转载 作者:行者123 更新时间:2023-12-03 09:19:44 25 4
gpt4 key购买 nike

我想将相关矩阵转换为成对表(删除自匹配和重复项)。

这是一个示例数据集。

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)])

谢谢,感谢任何帮助。

最佳答案

你可以尝试(不使用你的函数)

rmat.test[lower.tri(rmat.test,diag=TRUE)]=NA # put NA
rmat.test<-as.data.frame(as.table(rmat.test)) # as a dataframe
rmat.test<-na.omit(rmat.test) # remove NA
rmat.test<-rmat.test[with(rmat.test, order(-Freq)), ] # order by correlation

rmat.test
Var1 Var2 Freq
22 B E 0.8805442
12 B C 0.8787527
24 D E 0.8760533
6 A B 0.8611949
17 B D 0.8552434
23 C E 0.8507199
18 C D 0.8506079
21 A E 0.8309631
11 A C 0.8269318
16 A D 0.7968928

关于R - 将相关矩阵转换为成对矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33781147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com