【问题标题】:Reshape correlation matrix to be stacked by column pairs重塑相关矩阵以按列对堆叠
【发布时间】:2014-03-02 03:50:46
【问题描述】:

在 R 中,我使用 cov2cor() 来计算相关矩阵,例如:

  A,B,C,...
A 1,0.5,0.2,...
B 0.5,1,0.4,...
C 0.2,0.4,1,...
...

如何重塑矩阵,使列堆叠成行,如:

X,Y,Correlation
A,B,0.5,
A,C,0.2,
...
B,C,0.4,
...

提醒A,As 被排除在外,A,B B,A 被视为重复,因此被排除在外。

有没有简单的方法来实现这个?

【问题讨论】:

  • 不确定如何接受您的编辑建议,所以手动更新了我的答案。

标签: r matrix reshape


【解决方案1】:

你需要的功能是:

lower.tri {base} :这将允许您获取相关矩阵并将上/下三角形设置为 NAs 以及排除对角线。这将处理重复的 corr 值,即仅保留其中一个。 cor(A,C)=cor(C,A)

melt{reshape2}:这将采用下/上三角形并将其融合成一个只有三列的表格。第三列将具有 col1 和 col2 中的变量之间的相关性。

is.na{Matrix}:使用它来删除第三列为NA的行。

更新:@KunRen 建议将na.omit{base} 作为is.na 的更好替代品,我同意。

示例解决方案如下所示:

system.time(correlations<-cor(mydata,use="pairwise.complete.obs"))#get correlation matrix
upperTriangle<-upper.tri(correlations, diag=F) #turn into a upper triangle
correlations.upperTriangle<-correlations #take a copy of the original cor-mat
correlations.upperTriangle[!upperTriangle]<-NA#set everything not in upper triangle o NA
correlations_melted<-na.omit(melt(correlations.upperTriangle, value.name ="correlationCoef")) #use melt to reshape the matrix into triplets, na.omit to get rid of the NA rows
colnames(correlations_melted)<-c("X1", "X2", "correlation")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 2019-11-06
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 2013-05-17
    相关资源
    最近更新 更多