2011-03-30 100 views
12

所有成對距離說我有一個關於動物的2D平面上的位置(如視頻監控從相機直接開銷確定)的數據。例如具有15行(1對於每個動物)和2列(x位置和y位置)如何計算二維

animal.ids<-letters[1:15] 
xpos<-runif(15) # x coordinates 
ypos<-runif(15) # y coordinates 
raw.data.t1<-data.frame(xpos, ypos) 
    rownames(raw.data.t1) = animal.ids 

矩陣我想要計算的動物之間的所有成對距離。也就是說,得到動物的距離(行1)動物於第2行ROW3 ... row15,然後重複所有行這一步,避免重複距離計算。這樣做的函數的期望輸出將是所有成對距離的平均值。我要澄清的是我的意思是簡單的線性距離,由下式d < -sqrt(((X1-X2)^ 2)+((Y1-Y2)^ 2))。任何幫助將不勝感激。

此外,怎麼會這樣被擴展到一個類似的矩陣與一個任意大的偶數列(表示x和y位置在給定時間點每兩列)。這樣做的目的是計算爲每兩列和輸出,每個時間點的表及其相應的平均成對距離平均成對距離。下面是數據結構的3個時間點的例子:

xpos1<-runif(15) 
ypos1<-runif(15) 
xpos2<-runif(15) 
ypos2<-runif(15) 
xpos3<-runif(15) 
ypos3<-runif(15) 
pos.data<-cbind(xpos1, ypos1, xpos2, ypos2, xpos3, ypos3) 
    rownames(pos.data) = letters[1:15] 

回答

13

恰當地命名爲dist()會做到這一點:

x <- matrix(rnorm(100), nrow=5) 
dist(x) 

     1  2  3  4 
2 7.734978       
3 7.823720 5.376545     
4 8.665365 5.429437 5.971924   
5 7.105536 5.922752 5.134960 6.677726 

?dist更多細節

1

爲什麼你比較ð< -sqrt(((X1-X2)^ 2)+((Y1-Y2)^ 2))?

待辦事項d^2 < - (((X1-X2)^ 2)+((Y1-Y2)^ 2))。這會花費你少得多。