从 R 中的数据帧创建相关矩阵

use*_*267 6 r matrix correlation

我有一个相关性数据框,看起来像这样(尽管我的真实数据中有大约 15,000 行)

phen1<-c("A","B","C")
phen2<-c("B","C","A")
cors<-c(0.3,0.7,0.8)

data<-as.data.frame(cbind(phen1, phen2, cors))

    phen1  phen2   cors
1     A      B      0.3
2     B      C      0.7
3     C      A      0.8

Run Code Online (Sandbox Code Playgroud)

这是在外部创建并读入 R 中,我想将此数据框转换为相关矩阵,其中 phen1 和 2 作为该矩阵的行和列的标签。我只为下三角形或上三角形计算过这个,我没有对角线的 1。所以我希望最终结果是一个完整的相关矩阵,但第一步可能是创建下/上三角形,然后转换为我认为的完整矩阵。我不确定如何做这一步。

此外,结果可能不是直观的顺序,但我不确定这是否重要,但理想情况下我想要一种方法来做到这一点,它使用 phen1 和 phen 2 中的标签来确保矩阵具有正确的值在正确的地方,如果这有意义吗?

基本上为此,我想要这样的结果作为最终结果:

  A    B    C
A 1    0.3  0.8
B 0.3  1    0.7
C 0.8  0.7  1
Run Code Online (Sandbox Code Playgroud)

kas*_*007 0

您可以使用重塑库。

library(reshape)
data <- melt(data)
your_mat <- cast(data, phen1 ~ phen2 )
Run Code Online (Sandbox Code Playgroud)

输出:

  phen1    A    B    C
1     A <NA>  0.3 <NA>
2     B <NA> <NA>  0.7
3     C  0.8 <NA> <NA>
Run Code Online (Sandbox Code Playgroud)

您之所以会拒绝,是因为您的输入表中缺少许多组合。为了避免这种情况,你需要一个像这样的输入表:

  phen1 phen2 cors
1     A     B  0.3
2     B     C  0.7
3     C     A  0.8
4     A     C  0.8
5     B     A  0.3
6     C     B  0.7
7     A     A  1.0
8     B     B  1.0
9     C     C  1.0
Run Code Online (Sandbox Code Playgroud)