2013-09-23 2 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 

내 방법은 각을 비교하는 루프를 사용하는 것입니다 아래 행의 해당 열이있는 행의 열, 그러나 wi 큰 행렬은 효율적이지 않다. 더 나은 방법에 대한 아이디어가 있습니까?

들으

+3

사용'DIST (t (매트), 유형 = "맨해튼")'(같은 또는 무언가)? –

답변

2

바와 같이 manhattan 방법 dist를 사용하여 코멘트 말했다 :

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'))) !!!! 모두들! – StudentOfScience

관련 문제