gpt4 book ai didi

r - 使用循环的不同长度的不同数据帧中的纬度和经度数据计算距离

转载 作者:行者123 更新时间:2023-12-04 01:16:03 25 4
gpt4 key购买 nike

我有 2 个不同长度的数据框,每个都有一个经度和纬度坐标。我想通过计算纬度/经度点之间的距离来连接两个数据框。

为简单起见,数据框A(起点)具有以下结构

ID     long      lat 
1 -89.92702 44.19367
2 -89.92525 44.19654
3 -89.92365 44.19756
4 -89.91949 44.19848
5 -89.91359 44.19818

Data frame B(端点)结构相似但更短

ID      LAT       LON
1 43.06519 -87.91446
2 43.14490 -88.07172
3 43.08969 -87.91202

我想计算每个点之间的距离,这样我将以一个合并到 A 的数据框结束,该数据框具有 A1 和 B1、A1 和 B2、A1 和 B3 之间的距离。此外,对于 A$ID 中 A 的所有值和 B$ID 的所有值,这应该重复

A$ID   B$ID
1 1
2 2
3 3
4
5

在发布这篇文章之前,我咨询了几个 Stack Overflow 线程(包括 this oneThis Medium post,但我不确定如何处理循环,尤其是因为列表的长度不同。

谢谢!

最佳答案

我认为您可以在这里非常简洁地使用 outer

library(geosphere)
d <- outer(1:nrow(A), 1:nrow(B), Vectorize(function(x, y) distm(A[x, 2:3], B[y, 3:2])))
cbind(A, `colnames<-`(d, paste0("B", seq(nrow(B)))))
# ID long lat B1 B2 B3
# 1 1 -89.92702 44.19367 205173.6 189641.7 203652.9
# 2 2 -89.92525 44.19654 205252.6 189722.5 203728.1
# 3 3 -89.92365 44.19756 205219.0 189689.8 203692.6
# 4 4 -89.91949 44.19848 205015.6 189488.0 203486.2
# 5 5 -89.91359 44.19818 204620.0 189093.8 203087.6

数据:

A <- read.table(header=T, text="ID     long      lat 
1 -89.92702 44.19367
2 -89.92525 44.19654
3 -89.92365 44.19756
4 -89.91949 44.19848
5 -89.91359 44.19818")
B <- read.table(header=T, text="ID LAT LON
1 43.06519 -87.91446
2 43.14490 -88.07172
3 43.08969 -87.91202")

关于r - 使用循环的不同长度的不同数据帧中的纬度和经度数据计算距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63349663/

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