使用 geosphere::distHaversine 测量 R 中纬度/经度之间的距离

问题描述 投票:0回答:1

我有一个数据框,其中包含 2005 年至 2019 年期间每个 MLB 球队的球场及其市中心的纬度/经度。我需要计算每个观测值从公园到市中心的距离 (435)。下面是我运行的脚本,其中包含一些玩具数据

library(tidyverse)
library(geosphere)

MLB_Locations <- tibble(park_long =1:3,
                        park_lat = 1:3, 
                        city_long = 5:7,
                        city_lat = 10:12)

MLB_Locations <- MLB_Locations %>%
    mutate(distance = distHaversine(c(park_long, park_lat), c(city_long, city_lat)))

但是当我运行脚本时,我收到以下错误消息:

Error in `mutate()`:
ℹ In argument: `distance = distHaversine(c(x, y))`.
Caused by error in `.pointsToMatrix()`:
! Wrong length for a vector, should be 2
Run `rlang::last_trace()` to see where the error occurred.
r distance latitude-longitude
1个回答
0
投票

您需要将每对纬度/经度包装成一个具有两列的矩阵。如果你想在里面放一些东西

mutate
,你可以创建一个像这样的辅助函数:

helper <- function(x,y,u,v){
    distHaversine(matrix(c(x, y), ncol = 2), matrix(c(u, v), ncol = 2))
}

MLB_Locations <- MLB_Locations |> 
    mutate(dist = helper(park_long, park_lat, city_long, city_lat))
© www.soinside.com 2019 - 2024. All rights reserved.