R 中的 ggmap:如何从地理编码中提取单个位置特征?

ggmap in R: How do I extract individual location features from geocoding?

我正在尝试清理用户输入的地址,所以我认为使用 GGMAP 提取 Longitude/Latitude 和使用的地址将是清理所有内容的一种方式。但是,它吐出的 Address 有时在地址中包含口语名称,这使得很难解析出各个位置方面。

这是我正在使用的代码

for(i in 1:nrow(Raw_Address))
   {
     result <- try(geocode(Raw_Address$Address_Total[i], output = "more", source = "google"))
     Raw_Address$lon[i] <- as.numeric(result[1])
     Raw_Address$lat[i] <- as.numeric(result[2])
     Raw_Address$geoAddress[i] <- as.character(result[3])

   }

我尝试将 "latlona" 更改为 "more" 并查看结果编号,但只得到不同的 longitude/latitudes。我在显示结果向量的文档中没有看到任何地方。

基本上,我需要街道名称、城市、州、邮政编码、经度和纬度。

编辑:这是数据示例

用户输入: 1651 SE TIFFANY AVE。圣港露西佛罗里达

GGMAP 输出: martin health systems - tiffany ave., 1651 se tiffany ave, port st.露西,佛罗里达州 34952,美国

由于俗称,这很难解析。我可以使用 stringr 包来尝试和解析,但它可能不会包罗万象。但它 returns 是一个不同的地址,而一些用户拼写 "Tiffany" 错误或拼写 "Saint" 而不是 "St."

而不是使用 for 循环,purrr::map_dfr 将迭代一个向量并将生成的数据帧绑定到一个单独的数据帧中,这在这里很方便。例如,

library(tidyverse)

libraries <- tribble(
    ~library,                      ~address,
    "Library of Congress",         "101 Independence Ave SE, Washington, DC 20540",
    "British Library",             "96 Euston Rd, London NW1 2DB, UK",
    "New York Public Library",     "476 5th Ave, New York, NY 10018", 
    "Library and Archives Canada", "395 Wellington St, Ottawa, ON K1A 0N4, Canada"
)

library_locations <- map_dfr(libraries$address, ggmap::geocode, 
                             output = "more", source = "dsk")

这会输出很多消息,有些会告诉你 geocode 正在调用什么,例如

#> Information from URL : http://www.datasciencetoolkit.org/maps/api/geocode/json?address=101%20Independence%20Ave%20SE,%20Washington,%20DC%2020540&sensor=false

还有一些警告说因素被强制转换为角色:

#> Warning in bind_rows_(x, .id): Unequal factor levels: coercing to character
#> Warning in bind_rows_(x, .id): binding character and factor vector,
#> coercing into character vector

他们应该是,所以你可以忽略他们。 (如果你真的想要你可以写更多的代码来让它们消失,但你最终会得到同样的结果。)

合并生成的数据框,您将获得链接到原始数据集的所有位置数据:

full_join(libraries, library_locations)
#> Joining, by = "address"
#> # A tibble: 4 x 15
#>   library address      lon   lat type  loctype north south    east     west
#>   <chr>   <chr>      <dbl> <dbl> <chr> <chr>   <dbl> <dbl>   <dbl>    <dbl>
#> 1 Librar… 101 In…  -77.0    38.9 stre… rooftop  38.9  38.9 -77.0    -77.0  
#> 2 Britis… 96 Eus…   -0.125  51.5 stre… rooftop  51.5  51.5  -0.124   -0.126
#> 3 New Yo… 476 5t…  -74.0    40.8 stre… rooftop  40.8  40.8 -74.0    -74.0  
#> 4 Librar… 395 We… -114.     60.1 coun… approx…  83.1  41.7 -52.3   -141.   
#> # … with 5 more variables: street_number <chr>, route <chr>,
#> #   locality <chr>, administrative_area_level_1 <chr>, country <chr>

您可能会注意到 Data Science Toolkit 完全无法对加拿大图书馆和档案馆进行地理编码,无论出于何种原因 — 它被标记为国家而不是地址。地理编码器有时会出错。从这里,分出不需要的任何内容。

如果你想要更多信息,你可以使用geocodeoutput = "all"方法,但是那个returns列表你'我需要解析,这需要更多的工作。