r - 按最小地理空间距离 (R) 匹配两个数据集
问题描述
我有以下两个数据集:
houses <- data.table(house_number = c(1:3),
lat_decimal = seq(1.1, 1.3, by = 0.1),
lon_decimal = seq(1.4, 1.6, by = 0.1))
stations <- data.table(station_numer = c(1:11),
lat_decimal = seq(1, 2, by = 0.1),
lon_decimal = seq(2, 3, by = 0.1))
我想合并houses
并stations
在一起,使得结果station_number
是最接近相应的house_number
.
这个问题非常相似,但我不确定他们是否正在使用纬度和经度,而且我不知道在处理经度和纬度时如何计算距离(这就是为什么我更喜欢简单地使用distm
fromgeosphere
包裹)。
我从未使用过外部函数。如果上述问题的答案有效,我该如何调整答案以使用distm
函数而不是sqrt
函数?
解决方案
使用match_nrst_haversine
来自hutilscpp
:
library(hutilscpp)
houses[, c("station_number", "dist") := match_nrst_haversine(lat_decimal,
lon_decimal,
addresses_lat = stations$lat_decimal,
addresses_lon = stations$lon_decimal,
Index = stations$station_numer,
close_enough = 0,
cartesian_R = 5)]
houses
#> house_number lat_decimal lon_decimal station_number dist
#> 1: 1 1.1 1.4 1 67.62617
#> 2: 2 1.2 1.5 1 59.87076
#> 3: 3 1.3 1.6 1 55.59026
如果您的数据很多(即超过一百万个匹配点),close_enough
您可能需要进行调整以提高性能。cartesian_R
`cartesian_R`
从要进行地理编码的点开始的任何地址的最大半径。用于加速最小距离的检测。请注意,正如参数名称所暗示的,距离是在笛卡尔坐标中,所以可能是一个小数字。
`close_enough`
以米为单位的距离,低于该距离将被视为已发生匹配。(被认为“足够近”以匹配的距离。)
例如,close_enough = 10 表示将匹配十米内的第一个位置,即使稍后发生更接近的匹配。
可以作为字符串提供以强调单位,例如 close_enough = "0.25km"。只允许 km 和 m。
推荐阅读
- sql - 我的请求包含括号错误,但是没有
- python - 如何修复“TypeError:'str' object is not callable”?
- powerapps - 如何将参数从 Power Apps 发送到 Power Automate Flow
- web-services - 从 Basic/TB WebBrowser 通过基本 HTML 版本网站访问 WebMail(即:“Mail.com”)电子邮件
- django-models - GeoDjango / GDAL:存储了错误的数据字段
- r - 使用 R 自定义 ggplot 图例
- windows - 有没有办法在电子窗口应用程序中获取联系人列表
- django - 创建第一个数据库后,我无法使用 django 在 postgres 中创建另一个数据库
- python - 是否可以复制列表分配?
- java - 如何将android应用程序连接到localhost?