r - 如何在 r 中的单独坐标列表中找到最近的位置?
问题描述
给定事件地点列表:
event.coords <- data.frame(
event.id = letters[1:5],
lats = c(43.155, 37.804, 26.71, 35.466, 40.783),
lons = c(-77.616,-122.271, -80.064, -97.513, -73.966))
和地区的质心(恰好是邮政编码,但可能是州、国家等):
locale.centroids <-
data.frame(
locale.id = 1:5,
lats = c(33.449, 41.482, 40.778, 43.59, 41.736),
lons = c(-112.074, -81.67, -111.888, -70.335, -111.834))
我想计算每个区域中心距最近事件的距离。我的数据包含 100,000 个语言环境,所以我需要一些计算效率高的东西。
解决方案
一个tidyverse策略。为了计算地理距离,我正在使用包geosphere
event.coords <- data.frame(
event.id = letters[1:5],
lats = c(43.155, 37.804, 26.71, 35.466, 40.783),
lons = c(-77.616,-122.271, -80.064, -97.513, -73.966))
locale.centroids <-
data.frame(
locale.id = 1:5,
lats = c(33.449, 41.482, 40.778, 43.59, 41.736),
lons = c(-112.074, -81.67, -111.888, -70.335, -111.834))
library(tidyverse)
library(geosphere)
event.coords %>% rowwise() %>%
mutate(new = map(list(c(lons, lats)), ~ locale.centroids %>% rowwise() %>%
mutate(dist = distGeo((c(lons, lats)), .x)) %>%
ungroup %>%
filter(dist == min(dist)) %>%
select(locale.id, dist))) %>%
ungroup() %>% unnest_wider(new)
#> # A tibble: 5 x 5
#> event.id lats lons locale.id dist
#> <chr> <dbl> <dbl> <int> <dbl>
#> 1 a 43.2 -77.6 2 382327.
#> 2 b 37.8 -122. 3 953915.
#> 3 c 26.7 -80.1 2 1645206.
#> 4 d 35.5 -97.5 1 1355234.
#> 5 e 40.8 -74.0 4 432562.
由reprex 包于 2021-07-07 创建 (v2.0.0 )
推荐阅读
- joomla - PhpStorm mysql表前缀中的Joomla无效
- javascript - 调试:ESLint 警告“循环中声明的函数包含对变量的不安全引用...no-loop-func”
- javascript - 为什么这个 Css 类条件在 react js 中不起作用?
- java - 如何根据用户访问权限从数据库中过滤记录
- android - Firebase Firestore:没有互联网连接时是否有回调?
- c# - 如何获取 Binding 生成的元素的宽度?
- android - 在定义 Android Manifest 中的兼容性时,哪种方式是正确的?
- c# - 我的自动测试失败,因为它无法专注于弹出窗口
- javascript - 如何在 Node.js 服务器和 React 客户端应用程序之间共享 config.file?
- ios - SwiftUI:如何在按钮单击 + API 调用后显示下一个视图