Как выполнить пакетное геокодирование с помощью googleway с функциями tidyverse?

#r #googleway

#r #googleway

Вопрос:

Я искал способ выполнить пакетное геокодирование с использованием googleway ‘s google_geocode() , который может возвращать только один результат за раз. Я хотел использовать функции tidyverse, а в других ответах использовалось более старое и более запутанное apply семейство функций.

Комментарии:

1. @Samuel Liew удалил мой ответ, так что, думаю, я не могу поделиться решением этой проблемы.

Ответ №1:

Вот мое решение с использованием функций tidyverse.

При этом будет получен геокод, а также отформатированный адрес, если он вам нужен (другие компоненты результата также могут быть возвращены, их просто нужно добавить в таблицу в последней строке возвращаемой функции map.

 suppressPackageStartupMessages(require(tidyverse))
suppressPackageStartupMessages(require(googleway))

set_key("your key here")

df <- tibble(full_address = c("2379 ADDISON BLVD HIGH POINT 27262", 
                                      "1751 W LEXINGTON AVE HIGH POINT 27262", "dljknbkjs"))

df %>% 
  mutate(geocode_result = map(full_address, function(full_address) {
    res <- google_geocode(full_address) 

    if(res$status == "OK") {

      geo <- geocode_coordinates(res) %>% as_tibble()

      formatted_address <- geocode_address(res)

      geocode <- bind_cols(geo, formatted_address = formatted_address)
    }
    else geocode <- tibble(lat = NA, lng = NA, formatted_address = NA)

    return(geocode)

  })) %>%
  unnest()
#> # A tibble: 3 x 4
#>   full_address                  lat   lng formatted_address                
#>   <chr>                       <dbl> <dbl> <chr>                            
#> 1 2379 ADDISON BLVD HIGH POI…  36.0 -80.0 2379 Addison Blvd, High Point, N…
#> 2 1751 W LEXINGTON AVE HIGH …  36.0 -80.1 1751 W Lexington Ave, High Point…
#> 3 dljknbkjs                    NA    NA   <NA>
 

Создано 2019-04-14 пакетом reprex (версия 0.2.1)