【发布时间】:2019-03-19 17:21:10
【问题描述】:
数据
我有 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
问题
如您所见,segments 数据集中缺少 STREET 列。我想通过根据经度和纬度值查找给定lhrs 和STREET 之间的距离,在segments 数据集中创建此列。这意味着我需要将一组经纬度 lhrs 与所有 5 个 STREET 位置进行比较,并找到距离最短的位置。我认为这可以使用purrr 包来完成。
我的代码
我可以使用geosphere::distVincentyEllipsoid() 距离找到每个lhrs 和STREET 之间的距离,如下所示:
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))。
【问题讨论】:
-
使用
dput发布数据会更容易提供帮助 -
将您的最后一组代码导入另一个不带参数调用的
unnest()中,得到一个包含引用、距离以及构成data内容的列的数据框。最终尺寸为 5x6 -
@camille 这不包括
STREET。