как рассчитать все попарные расстояния в двух измерениях

Скажем, у меня есть данные о положении животных на 2-й плоскости (по данным видеонаблюдения с камеры, расположенной прямо над головой). Например, матрица с 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

Я хочу вычислить все попарные расстояния между животными. То есть получите расстояние от животного a (строка 1) до животного в строке 2, row3 ... row15, а затем повторите этот шаг для всех строк, избегая повторных вычислений расстояния. Желаемый результат функции, которая выполняет это, будет средним значением всех попарных расстояний. Я должен пояснить, что я имею в виду простое линейное расстояние, из формулы d <-sqrt (((x1-x2) ^ 2) + ((y1-y2) ^ 2)). Любая помощь будет принята с благодарностью.

Кроме того, как это можно было бы расширить до аналогичной матрицы с произвольно большим четным числом столбцов (каждые два столбца представляют позиции x и y в заданный момент времени). Целью здесь было бы вычислить средние попарные расстояния для каждых двух столбцов и вывести таблицу с каждым моментом времени и соответствующим средним попарным расстоянием. Вот пример структуры данных с тремя временными точками:

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
задан distance deprived 30 March 2011 в 15:45
поделиться