Получить результаты distm в столбце, а не в матрице
Я пытаюсь вычислить расстояние между двумя различными наборами местоположений (всего 145), но на выходе получается матрица, а не столбец значений.
мой фрейм данных выглядит следующим образом:
head(df)
site1 Lon1 Lat1 site2 lon2 lat2
1 TN -64.33788 45.90501 BennettMeadow -72.47 42.68
3 TN -64.33788 45.90501 45.91:-64.34 -64.34 45.91
4 TN -64.33788 45.90501 45.9:-64.36 -64.36 45.90
5 TN -64.33788 45.90501 45.91:-64.35 -64.35 45.91
6 TN -64.33788 45.90501 45.89:-64.34 -64.34 45.89
7 TN -64.33788 45.90501 45.9:-64.32 -64.32 45.90
Я использую distm для своих вычислений, но на выходе получается матрица, а не вектор со 145 значениями (по одному для каждого парного набора координат).
dist <- distm(df[2:3], df[5:6], fun = distGeo)
head(dist[,1:5])
[,1] [,2] [,3] [,4] [,5]
[1,] 740870.5 578.1295 1804.444 1091.421 1676.753
[2,] 740870.5 578.1295 1804.444 1091.421 1676.753
[3,] 740870.5 578.1295 1804.444 1091.421 1676.753
[4,] 740870.5 578.1295 1804.444 1091.421 1676.753
[5,] 740870.5 578.1295 1804.444 1091.421 1676.753
[6,] 740870.5 578.1295 1804.444 1091.421 1676.753
РЕДАКТИРОВАТЬ:
Похоже, что diag(dist) поможет.
2 ответа
Я думаю, что вы хотите distGeo
функционировать, а не distm
функция.
distGeo
Функция найдет расстояние между каждой парой точек в двух векторах, таким образом, получится вектор.distm
Функция вычислит расстояние между каждым элементом в первом векторе и каждым элементом во втором векторе, в результате чего получится матрица "m на n".
distGeo(df[,2:3], df[,5:6])
#[1] 740870.5772 578.5153 1804.5629 1091.7911 1676.4440 1495.0507
distm(df[2:3], df[5:6], fun = distGeo)
# [,1] [,2] [,3] [,4] [,5] [,6]
#[1,] 740870.6 578.5153 1804.563 1091.791 1676.444 1495.051
#[2,] 740870.6 578.5153 1804.563 1091.791 1676.444 1495.051
#[3,] 740870.6 578.5153 1804.563 1091.791 1676.444 1495.051
#[4,] 740870.6 578.5153 1804.563 1091.791 1676.444 1495.051
#[5,] 740870.6 578.5153 1804.563 1091.791 1676.444 1495.051
#[6,] 740870.6 578.5153 1804.563 1091.791 1676.444 1495.051
as.vector
преобразует матрицу в вектор (по столбцам):
as.vector(dist)
или, если хотите, построчно:
as.vector(t(dist))
Если вам нужно сохранить координаты, одним из способов будет:
df <- as.data.frame(dist)
names(df) <- c("dist.1", "dist.2")
reshape(data = df, direction = "long", varying = 1:2)
При желании вы можете назвать столбцы с координатами:
reshape(data = df, direction = "long", varying = 1:2, timevar = "x", idvar = "y")