在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,A
被排除在外,A,B
B,A
被视为重复,因此排除了{{1}}。
有没有简单的方法来实现这个?
答案 0 :(得分:7)
您需要的功能是:
lower.tri {base}:这将允许您获取相关矩阵并将上/下三角形设置为NA以及排除对角线。这将处理重复的corr值,即,仅保留其中一个。心病(A,C)= COR(C,A)
melt{reshape2}:这将采用下/上三角形并将其融入仅有三列的表格中。第3列将具有col1和amp;中变量之间的相关性。 COL2。
is.na{Matrix}:使用此选项删除第3列为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")