我用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)])
这是使用combn
和apply
函数的方法:
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
set.seed(123)
dat <- data.frame(aa = rnorm(10),
bb = rnorm(10),
cc = rnorm(10))