将相关矩阵重塑为按列对堆叠的形式

3
在R中,我使用来计算相关矩阵,如下所示:
  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,A被排除在外,而A,BB,A被视为重复项,因此其中一个将被排除。
有没有一种简单的方法来实现这个功能?

不确定如何接受您的编辑建议,因此我手动更新了我的答案。 - user1509107
1个回答

7
你需要的功能如下:

lower.tri {base}:这将允许您获取相关矩阵并将上/下三角设置为NAs,同时排除对角线。这将处理重复的相关值,即只保留其中一个。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")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接