if_else через несколько столбцов в R - PullRequest
0 голосов
/ 05 июня 2019

Я использую функцию (mutate_geocode), которая выводит два столбца данных, долготы и широты.Поскольку API Google стоит денег в больших количествах, я хочу, чтобы он запускал функцию геокодирования только в тех областях, в которых у меня НЕ есть долгота и широта.

library(dplyr)
problem <- tibble(location = c("Atlanta United States", "Paris France", "Rome Italy"),
lon = c(NA, 2.35, 12.49),
lat = c(NA, 48.86, 41.90))

И я хочу, чтобы в конечном итоге это выглядело так (опять же, БЕЗ запуска геокода над областями, которые у меня уже есть:

library(dplyr)
solution <- tibble(location = c("Atlanta United States", "Paris France", "Rome Italy"),
lon = c(-84.39, 2.35, 12.49),
lat = c(33.75, 48.86, 41.90))

Чтобы добраться туда, я попытался использовать if_else, но, похоже, я не могу заставить его работать.

library(ggmap)
library(dplyr)
solution <- if_else(is.na(problem$lon) & is.na(problem$lat), true = mutate_geocode(problem$location), false = c(problem$lon & problem$lat))

Я открыт для решений и ценю ваше время! Если бы вы также могли объяснить свой код, это также поможет мне в будущем. Спасибо!

1 Ответ

1 голос
/ 05 июня 2019

Как и base::ifelse, dplyr::if_else требует, чтобы результат был "той же формы", что и аргумент теста. Ваш тест - это просто вектор одного столбца, поэтому результаты должны быть вектором одного столбца. Поскольку ваши результаты имеют другую форму, if_else - плохой инструмент для работы.

Просто запустите mutate_geocode для отсутствующего подмножества данных:

is_missing = is.na(problem$lon) & is.na(problem$lat)  ## maybe you want `|` instead?
problem[is_missing , c("lon", "lat")] = mutate_geocode(problem[is_missing , "location"])
...