【问题标题】:How do I extract correlations from correlation table and make a dataframe of pairs with the greatest correlations?如何从相关表中提取相关性并制作具有最大相关性的对的数据框?
【发布时间】:2020-08-29 09:08:16
【问题描述】:

我有一个包含 68 个变量的大相关矩阵。我想提取系数大于 abs(0.40) 的变量对。

d <- data.frame(v1 = c(0.5,4,5.4,-2,4), v2 = c(0, 45, -5.6, -0.5, 2), v3 = c(9, -9, 8.9, 12, 1), v4 = c(8, 9, 10, -1, 0.89), v5 = c(-1, 2, -0.36, -0.64, -4))
cor.mat <- round(cor(d), 2)

所以,我知道如何提取大于 abs(0.40) 的系数:

extr <- lapply(cor.mat, function(x){x[x>abs(0.40)]})

但我需要的是一个包含 3 个变量的数据框——Var1、Var2、Cor——它可以向我显示类似的内容:

View(DF)

 Var1|Var2|Cor
 v1  | v4 |  0.58
 v4  | v5 |  0.58
 ................
And so on.

我不明白,如何 (1) 提取变量的名称,(2) 形成具有以下结构的数据框。我希望我解释得当...

【问题讨论】:

    标签: r dataframe matrix lapply correlation


    【解决方案1】:

    我们可以使用whicharr.ind = TRUE 来获取cor.mat 值大于0.4 的行和列索引。我们可以使用该索引分别从cor.mat 中提取行名和列名,并创建一个新的数据框。

    inds <- which(cor.mat > 0.4, arr.ind = TRUE)
    
    data.frame(Var1 = rownames(cor.mat)[inds[, 1]], 
               Var2 = colnames(cor.mat)[inds[, 2]], 
                Cor = cor.mat[inds])
    
    #   Var1 Var2  Cor
    #1    v1   v1 1.00
    #2    v4   v1 0.58
    #3    v2   v2 1.00
    #4    v5   v2 0.66
    #5    v3   v3 1.00
    #6    v1   v4 0.58
    #7    v4   v4 1.00
    #8    v5   v4 0.58
    #9    v2   v5 0.66
    #10   v4   v5 0.58
    #11   v5   v5 1.00
    

    也许,使用

    inds <- which(cor.mat > 0.4 & cor.mat < 1, arr.ind = TRUE)
    

    可能更有帮助?

    【讨论】:

    • 谢谢!您的解决方案适用于此示例代码,但不适用于我的。错误是:Error in inds[, 1] : incorrect number of dimensions
    • 我该如何解决?
    • 我不确定,因为您共享的数据不会发生这种情况。您的实际数据与您的真实数据有何不同?你有NA 值吗?在您的情况下,inds 的输出是什么?
    • 是的,我的数据中有几个NAinds 的输出看起来像 row col v1 3 2 v2 2 3 v3 6 5 v4 5 6 v5 8 7 v6 7 8 v7 13 12
    • 我认为您已将which 应用于其他一些数据,并使用它对其他一些数据进行子集化。您确定您使用的数据正确吗?
    【解决方案2】:

    如果我们转换为table,我们可以以一种紧凑的方式做到这一点

    subset(as.data.frame.table(cor.mat), Freq > 0.4)
    #  Var1 Var2 Freq
    #1    v1   v1 1.00
    #4    v4   v1 0.58
    #7    v2   v2 1.00
    #10   v5   v2 0.66
    #13   v3   v3 1.00
    #16   v1   v4 0.58
    #19   v4   v4 1.00
    #20   v5   v4 0.58
    #22   v2   v5 0.66
    #24   v4   v5 0.58
    #25   v5   v5 1.00
    

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2022-12-23
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多