Multidplyr和ggmap的mutate_geocode

时间:2016-12-13 10:50:55

标签: r dplyr ggmap

我希望使用通过ggmap访问的Google API快速对大量地址进行地理编码(我正在使用ggmap版本2.7,允许通过指定Google API密钥register_google()功能)。

基本功能有效,但在以下列方式使用dplyr时速度非常慢:

devtools::install_github("dkahle/ggmap") #needed for v 2.7, not yet on CRAN

library(dplyr)
library(ggmap)
DF %>%
  select(ID, full_address) %>%
  mutate_geocode(full_address)

我每秒最多获得1-3次查询,这几千条记录对我的使用速度不够快。我想使用multidplyr来运行并行查询并加快进程。

我见过一个multidplyr example on SO here,但我似乎无法为我的情况实现它。

我想象的解决方案可以使用multidplyr::partition()并使用:

  1. ggmap::mutate_geocode()函数;或
  2. ggmap::geocode()函数,它返回一对列(经度和纬度)以及dplyr::do()函数。
  3. 基于上面链接的SO示例,我相信代码看起来像这样:

      library(dplyr)
      library(ggmap)
      devtools::install_github("hadley/multidplyr")
      library(multidplyr)
    
      DF$split <- 1:4 # the column by which data will be split across 4 threads
    
      # For solution (1)
      DF %>%
      select(ID, full_address) %>%
      partition(split) %>%
      mutate_geocode(full_address)
    
    
      # For solution (2)
      DF %>%
      select(ID, full_address) %>%
      partition(split) %>%
      do(
      {ggmap::geo_code(full_address)}
         )
    

    任何人都可以帮我把它弄成正确的形状吗?有什么建议可以让它更快吗?

0 个答案:

没有答案