Данные
У меня есть 2 набора данных:
* segments
набор данных представляет сегменты дороги (lhrs
.)
* hwys
набор данных представляет магистрали, которые содержат отдельные lhrs
.
> segments
# A tibble: 1 x 5
lhrs mto_collision_ref_number latitude longitude highway_number
<dbl> <dbl> <dbl> <dbl> <dbl>
1 10004 1549630 42.9 -78.9 1
> hwys
# A tibble: 5 x 3
STREET longitude latitude
<fct> <dbl> <dbl>
1 HIGHWAY 3 -80.0 42.9
2 ADELAIDE AVE E -78.9 43.9
3 HOWARD AVE -83.0 42.2
4 HIGHWAY 12 -79.7 44.7
5 CORONATION BLVD -80.3 43.4
Проблема
Как видите, столбец STREET
отсутствует в наборе данных segments
.Я хочу создать этот столбец в наборе данных segments
путем нахождения расстояния между данным lhrs
и STREET
на основе значений долготы и широты.Это означает, что мне нужно сравнить один набор длинных лат lhrs
со всеми 5 STREET
местоположениями и найти тот, который имеет минимальное расстояние.Я думаю, что это можно сделать с помощью пакета purrr
.
Мой код
Я могу найти расстояния между каждым lhrs
и STREET
, используя расстояние geosphere::distVincentyEllipsoid()
, следующим образом:
library(tidyverse)
segments_nested <- segments %>% group_by(mto_collision_ref_number) %>% nest()
segments_nested %>%
mutate(diztances = purrr::map(
data, ~ distVincentyEllipsoid(hwys %>% select(longitude, latitude),
c(.$longitude, .$latitude)))) %>%
unnest(.preserve = data)
# A tibble: 5 x 3
mto_collision_ref_number data diztances
<dbl> <list> <dbl>
1 1549630 <tibble [1 x 4]> 85316.
2 1549630 <tibble [1 x 4]> 110700.
3 1549630 <tibble [1 x 4]> 342921.
4 1549630 <tibble [1 x 4]> 213961.
5 1549630 <tibble [1 x 4]> 125547.
ОДНАКО, я до сих пор не могу понять, как связать эти расстояния с STREET
.Пожалуйста, объясните мне, как я могу использовать purrr::map
для расчета расстояний, КАК ХОРОШО, как соответствующих STREET
.Получив это, я могу просто group_by(mto_collision_ref_number)
и получить summarize(min(diztances))
.