0

これは比較的単純なはずですが、何らかの理由で困惑しています。

列がアルファベット順になるように系統距離行列を並べ替えたいと思います。

簡単な例を次に示します。

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

何か案は?

4

2 に答える 2

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))])
于 2012-11-12T19:39:30.043 に答える
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
于 2012-11-12T19:50:26.310 に答える