首页 > 解决方案 > 从 R 中的数据框创建相关矩阵

问题描述

我有一个看起来像这样的相关数据框(尽管我的真实数据中有大约 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

这是在外部创建并读入 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

标签: rmatrixcorrelation

解决方案


这是基础 R 中的另一个,我们在其中创建了一个对称的数据框,与和相同,data但列倒置。然后我们使用得到一个相关矩阵并将对角线设置为1。phen1phen2xtabs

data1 <- data.frame(phen1 = data$phen2, phen2 = data$phen1, cors = data$cors)  
df <- rbind(data, data1)
df1 <- as.data.frame.matrix(xtabs(cors ~ ., df))
diag(df1) <- 1
df1

#    A   B   C
#A 1.0 0.3 0.8
#B 0.3 1.0 0.7
#C 0.8 0.7 1.0

数据

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

推荐阅读