在R中的距离矩阵中按字母顺序排列列/行

时间:2012-11-12 19:27:00

标签: r distance

这应该相对简单,但出于某种原因,我很难过。

我想重新排序系统发育距离矩阵,以便列按字母顺序排列。

这是一个简单的例子:

require("ape")
set.seed(5)
dist(cophenetic(rtree(5)))

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

喜欢这个吗?

require("ape")
set.seed(5)
res <- dist(cophenetic(rtree(5)))
res <- as.matrix(res)
res <- as.dist(res[order(rownames(res)),order(colnames(res))])

答案 1 :(得分:1)

如果T <- dist(cophenetic(rtree(5)))

T属于dist类,因此它没有名称,只有标签。
您可以订购其标签

ordering <- sort(attr(T, "Labels"))

您可以将其强制转换为矩阵,然后对其进行排序

T.mat <- as.matrix(T)[ordering, ordering]

然后正如@Roland建议的那样,将其转换回dist

T  <- as.dist(T.mat)

如果您想控制矩阵的格式,可以使用以下

T.fm <- format(T.mat, digits=3, nsmall=3)
T.fm[row(T.fm) < col(T.fm)] <- ""
print(T.fm, quote=F)

#      t1    t2    t3    t4    t5   
# t1 0.000                        
# t2 3.436 0.000                  
# t3 1.309 3.632 0.000            
# t4 2.145 2.338 2.530 0.000      
# t5 1.756 2.783 2.173 1.136 0.000

T  <- as.dist(T.fm)
T
#       t1    t2    t3    t4
# t2 3.436                  
# t3 1.309 3.632            
# t4 2.145 2.338 2.530      
# t5 1.756 2.783 2.173 1.136