2013-09-23 153 views
1

我有一個R問題。我心裏有該做到這一點的算法,但如果有這樣做的簡潔方式想知道以下幾點:R比較要創建距離矩陣的功能

假設你有以下矩陣:

 [,1] [,2] [,3] [,4] [,5] 
[A,] 0 0 0 0 1 
[B,] 0 0 0 1 1 
[C,] 0 0 1 1 1 
[D,] 0 0 1 1 0 
[E,] 1 0 0 0 0 
[F,] 1 1 1 0 0 

現在我想創造的另一個矩陣另一行的每一行的差異(即距離矩陣)類似(雖然我是半滿,它只是反映獲得頂部):

 [,A] [,B] [,C] [,D] [,E] [,F] 
[A,] 0  
[B,] 1 0  
[C,] 2 1 0  
[D,] 3 2 1 0  
[E,] 2 3 4 3 0 
[F,] 4 5 4 3 2 0 

我的方法是使用一個循環比較每個行的列與下面相應的行列,但無線第三大矩陣效率不高。任何想法如何更好地做到這一點?

THX

+3

使用'DIST(噸(墊),類型= 「曼哈頓」)'(或類似的東西)? –

回答

2

如使用distmanhattan方法的評論稱:

dt <- read.table(text='  [,1] [,2] [,3] [,4] [,5] 
[A,] 0 0 0 0 1 
[B,] 0 0 0 1 1 
[C,] 0 0 1 1 1 
[D,] 0 0 1 1 0 
[E,] 1 0 0 0 0 
[F,] 1 1 1 0 0') 

mm <- as.matrix(dt) 
dist(mm,method='manhattan' ,diag=TRUE) 

     [A,] [B,] [C,] [D,] [E,] [F,] 
[A,] 0       
[B,] 1 0      
[C,] 2 1 0    
[D,] 3 2 1 0   
[E,] 2 3 4 3 0  
[F,] 4 5 4 3 2 0 
+0

哇,這很酷!所以當我說dist_cmat = dist(mm,method ='manhattan')時,變量dist_cmat不是矩陣,是否有可能從這個函數中獲得一個矩陣? – StudentOfScience

+0

是的......你只是用'as.matrix'強制結果 – agstudy

+0

dist_cmat = as.matrix(dist(mm,method ='manhattan'))works !!!!所有! – StudentOfScience