Я пытаюсь найти расстояние между несколькими городами, используя функцию distHaversine в пакете геосферы. Этот код требует множества аргументов:
Долгота и широта первого места.
Долгота и широта второго места.
Радиус Земли в любых единицах (я использую r = 3961 для миль).
Когда я ввожу это как вектор, оно легко работает:
HongKong <- c(114.17, 22.31)
GrandCanyon <- c(-112.11, 36.11)
library(geosphere)
distHaversine(HongKong, GrandCanyon, r=3961)
#[1] 7399.113 distance in miles
Однако мои фактические наборы данных выглядят так:
library(dplyr)
location1 <- tibble(person = c("Sally", "Jane", "Lisa"),
current_loc = c("Bogota Colombia", "Paris France", "Hong Kong China"),
lon = c(-74.072, 2.352, 114.169),
lat = c(4.710, 48.857, 22.319))
location2 <- tibble(destination = c("Atlanta United States", "Rome Italy", "Bangkok Thailand", "Grand Canyon United States"),
lon = c(-84.388, 12.496, 100.501, -112.113),
lat = c(33.748, 41.903, 13.756, 36.107))
Я хочу, чтобы были строки, указывающие, как далеко каждый пункт назначения находится от текущего местоположения человека.
Я знаю, что должен быть способ использования pmap_dbl () purrr, но я не могу понять это.
Бонусные баллы, если в вашем коде используется обратная точка и если есть простой способ создать столбец, который определяет ближайший пункт назначения. Спасибо!
В идеальном мире я бы получил это:
solution <- tibble(person = c("Sally", "Jane", "Lisa"),
current_loc = c("Bogota Colombia", "Paris France", "Hong Kong China"),
lon = c(-74.072, 2.352, 114.169),
lat = c(4.710, 48.857, 22.319),
dist_Atlanta = c(1000, 2000, 7000),
dist_Rome = c(2000, 500, 3000),
dist_Bangkok = c(7000, 5000, 1000),
dist_Grand = c(1500, 4000, 7500),
nearest = c("Atlanta United State", "Rome Italy", "Bangkok Thailand"))
Примечание: числа в столбцах dist являются случайными; однако они будут выводиться из функции distHaversine (). Название этих столбцов является произвольным - его не нужно так называть. Кроме того, если ближайший столбец выходит за рамки этого вопроса, я думаю, что смогу его выяснить.