如何将Symmetrix矩阵信息提取到R中的数据帧

时间:2019-07-02 15:28:34

标签: r

假设我有一个对称矩阵:

 cnt<-c(1,2,3,4,2,3,1,6,3,1,4,3,4,6,3,5)
 m<-matrix(cnt, nrow=4, byrow=T)
 colnames(m)<-rownames(m)<-LETTERS[1:4]
 m
  A B C D
A 1 2 3 4
B 2 3 1 6
C 3 1 4 3
D 4 6 3 5

我想要的是将高对角线计数提取到成对的数据帧,例如:

    A-B 2
    A-C 3
    A-D 4
    B-C 1
    B-D 6
    C-D 3

2 个答案:

答案 0 :(得分:3)

base 中,查看upper.tri的来源,可以使用以下方法完成:

d <- dim(m)
tt <- which(.row(d) < .col(d), arr.ind=TRUE)
data.frame(rc=paste(rownames(m)[tt[,1]], colnames(m)[tt[,2]], sep="-"), m=m[tt])
#   rc m
#1 A-B 2
#2 A-C 3
#3 B-C 1
#4 A-D 4
#5 B-D 6
#6 C-D 3

答案 1 :(得分:2)

我们只需将upper.tri替换为NA,将melt替换为'long'格式,并将unite替换为列

library(reshape2)
library(dplyr)
m[upper.tri(m, diag = TRUE)] <- NA
melt(m, na.rm = TRUE)  %>%
     unite(Var1, Var2, Var1)
#   Var1 value
#2   A_B     2
#3   A_C     3
#4   A_D     4
#7   B_C     1
#8   B_D     6
#12  C_D     3