R中的熔解相关矩阵

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R中的熔解相关矩阵相关的知识,希望对你有一定的参考价值。

我用R创建了一个相关矩阵:

cor(df, use = "p")->df_corr

然后我使用以下方法熔化矩阵:

melt(df_corr) -> df_corr_melted

要得到:

Var1 Var2 value
A    B    .1
A    C     .2
A    A     1
B    A     .1
B    C     .4
B    B     1
C    A     .2
C    B     .4
C    C     1

我想删除还原剂对。例如,我只需要corr(A,C)而不是corr(C,A)。我通读了dplyr中的过滤命令,但由于行组合实际上是唯一的,因此这些不是真正的重复。有什么建议?

答案

您可以通过使用replace将对角线和矩阵的上三角或下三角设置为NA,然后只需melt(..., na.rm = TRUE)一次性完成:

演示:

library(reshape2)
melt(replace(df_corr, lower.tri(df_corr, TRUE), NA), na.rm = TRUE)
#   Var1 Var2      value
# 4   aa   bb  0.5776151
# 7   aa   cc -0.4059593
# 8   bb   cc -0.5673487

样本数据:

set.seed(123)
df_corr <- cor(data.frame(aa = rnorm(10), bb = rnorm(10), cc = rnorm(10)), use = "p")
另一答案

在融化之前你可以做到:

data.frame(Var1=t(combn(colnames(df_corr),2)),Var2=df_corr[lower.tri(df_corr)])
另一答案

这是使用combnapply函数的方法:

c_names <- combn(names(dat), 2)

cors <- apply(c_names, 2, FUN = function(x) cor(dat[x[1]], dat[x[2]]))

cbind.data.frame(t(c_names), cors)

   1  2       cors
1 aa bb  0.5776151
2 aa cc -0.4059593
3 bb cc -0.5673487

Data

set.seed(123)
dat <- data.frame(aa = rnorm(10),
                  bb = rnorm(10),
                  cc = rnorm(10))

以上是关于R中的熔解相关矩阵的主要内容,如果未能解决你的问题,请参考以下文章

R 中的相关矩阵相关性显示为“?”在网格中

如何将向量附加为 R 矩阵中的列?

R中的这个非数字矩阵范围错误是啥?

R数据可视化初阶-散点图散点图矩阵相关系数

R中的相关聚类

是否有 R 函数可以导出相关矩阵中显示的相关性?