В R, как сложить расстояние между строками (каждая из них является GPS-координатой)? - PullRequest
1 голос
/ 27 апреля 2020

У меня много точек GPS, и мне нужна сумма расстояний между двумя последующими точками (рядами) в заданную дату, чтобы я мог иметь ежедневное расстояние отслеживания.

Каждый день имеет около 200 точек GPS , Последующие точки означают две строки, в которых первый находится раньше второго. Поскольку мне нужно общее расстояние между этими точками, оно должно учитывать порядок строк столбца «время» в течение данного дня (столбец «дата»).

Спасибо!

Мой стол Сорта выглядит так:

date        time       lat        lon    
18-Jan-18 12:48:39 -24.061464 -47.99523
18-Jan-18 12:48:48 -24.06163  -47.995354
18-Jan-18 12:53:17 -24.06175  -47.995277

1 Ответ

0 голосов
/ 27 апреля 2020

Мы можем использовать pointDistance из пакета raster для расчета расстояния. lag из dplyr поможет рассчитать последующие баллы. replace_na из tidyr очень удобно, но вы можете использовать свой любимый способ работы с NA.

library(raster)
library(dplyr)
library(tidyr)
data %>% 
  mutate(Distance = pointDistance(cbind(lon,lat),cbind(lag(lon),lag(lat)),lonlat = TRUE)) %>%
  mutate(TotalDistance = cumsum(replace_na(Distance,0)))
#       date     time       lat       lon Distance TotalDistance
#1 18-Jan-18 12:48:39 -24.06146 -47.99523       NA       0.00000
#2 18-Jan-18 12:48:48 -24.06163 -47.99535 22.29547      22.29547
#3 18-Jan-18 12:53:17 -24.06175 -47.99528 15.42660      37.72207  

Данные

data <- structure(list(date = structure(c(1L, 1L, 1L), .Label = "18-Jan-18", class = "factor"), 
    time = structure(1:3, .Label = c("12:48:39", "12:48:48", 
    "12:53:17"), class = "factor"), lat = c(-24.061464, -24.06163, 
    -24.06175), lon = c(-47.99523, -47.995354, -47.995277)), class = "data.frame", row.names = c(NA, 
-3L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...