我有一个数据框,其中包含 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.
您需要将每对纬度/经度包装成一个具有两列的矩阵。如果你想在里面放一些东西
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))