gpt4 book ai didi

r - 在 data.table 上使用 geosphere distm 函数来计算距离

转载 作者:行者123 更新时间:2023-12-04 11:22:02 25 4
gpt4 key购买 nike

我创建了一个 data.table,其中有 6 列。我的 data.table 有一列比较两个位置:位置 1 和位置 2。我正在尝试使用 distm 函数计算每行位置之间的距离,创建第 7 列。 geosphere 包中的 distm 包需要两个不同的向量来计算每个纬度/经度组合。我下面的代码不起作用,所以我想弄清楚如何为函数提供向量。

LOC_1_ID LOC1_LAT_CORD LOC1_LONG_CORD LOC_2_ID LOC2_LAT_CORD LOC2_LONG_CORD
1 35.68440 -80.48090 70624 34.86752 -82.46632
6 35.49770 -80.62870 70624 34.86752 -82.46632
10 35.66042 -80.50053 70624 34.86752 -82.46632

假设 res 持有 data.table 下面的代码不起作用。
 res[,DISTANCE := distm(c(LOC1_LAT_CORD, LOC1_LONG_CORD),c(LOC2_LAT_CORD, LOC2_LONG_CORD), fun=distHaversine)*0.000621371]

如果我要拉出每个向量,函数就可以正常工作。
loc1 <- res[LOC1_ID == 1,.(LOC1_LAT_CORD, LOC1_LONG_CORD)]
loc2 <- res[LOC2_ID==70624,.(LOC2_LAT_CORD, LOC2_LONG_CORD)]
distm(loc1, loc2, fun=distHaversine)

真的,我的问题是当该函数需要向量作为参数时,如何应用函数来选择 data.table 中的列。

最佳答案

distm函数生成 一组点的距离矩阵 .如果您只是比较每一行上的点并添加一列,您确定这是您想要的功能吗?

听起来你真的想要 distHaversinedistGeo

library(data.table)
library(geosphere)

dt <- read.table(text = "LOC_1_ID LOC1_LAT_CORD LOC1_LONG_CORD LOC_2_ID LOC2_LAT_CORD LOC2_LONG_CORD
1 35.68440 -80.48090 70624 34.86752 -82.46632
6 35.49770 -80.62870 70624 34.86752 -82.46632
10 35.66042 -80.50053 70624 34.86752 -82.46632", header = T)

setDT(dt)
dt[, distance_hav := distHaversine(matrix(c(LOC1_LONG_CORD, LOC1_LAT_CORD), ncol = 2),
matrix(c(LOC2_LONG_CORD, LOC2_LAT_CORD), ncol = 2))]

# LOC_1_ID LOC1_LAT_CORD LOC1_LONG_CORD LOC_2_ID LOC2_LAT_CORD LOC2_LONG_CORD distance_hav
# 1: 1 35.68440 -80.48090 70624 34.86752 -82.46632 202046.3
# 2: 6 35.49770 -80.62870 70624 34.86752 -82.46632 181310.0
# 3: 10 35.66042 -80.50053 70624 34.86752 -82.46632 199282.1

更新: This answer给出了更高效的 distHaversine 版本用于 data.table

关于r - 在 data.table 上使用 geosphere distm 函数来计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34213765/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com