получить результаты distm в столбце, а не в матрице - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь вычислить расстояние между двумя различными наборами местоположений (всего 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 ]

0 голосов
/ 20 декабря 2018

Я думаю, вам нужна функция 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 
0 голосов
/ 20 декабря 2018

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...