将revgeocode应用于经度 - 纬度坐标列表

Rut*_*ger 9 google-maps loops r ggmap

我试图通过使用ggmap库中的revgeodcode函数来获取经度纬度坐标(长)列表的Zip代码.

我的问题和数据与此处相同:在FOR循环中使用revgeocode函数.需要帮助,但接受的答案对我不起作用.

我的数据(.csv):

ID,      Longitude,      Latitude
311175,  41.298437,      -72.929179
292058,  41.936943,      -87.669838
12979,   37.580956,      -77.471439
Run Code Online (Sandbox Code Playgroud)

我按照相同的步骤:

data <- read.csv(file.choose())
dset <- as.data.frame(data[,2:3])
location = dset
locaddr <- lapply(seq(nrow(location)), function(i){
               revgeocode(location[i,],
               output = c("address"),
               messaging = FALSE,
               sensor = FALSE,
               override_limit = FALSE)
               })
Run Code Online (Sandbox Code Playgroud)

...并收到错误消息:"错误:is.numeric(位置)&&长度(位置)== 2不为TRUE"具体来说,is.numeric(位置)为FALSE,这看起来很奇怪,因为我可以乘以2并得到预期的答案.

任何帮助,将不胜感激.

jlh*_*ard 11

这里有很多错误.

首先,你有经纬度逆转.根据指定,数据集中的所有位置都位于南极洲.

其次,revgeocode(...)需要一个长度为2的数字向量,其中包含该顺序的经度和纬度.您正在传递一个data.frame对象(这是错误的原因),并且按照(1)它的顺序错误.

第三,revgeocode(...)使用谷歌地图api,每天限制你2500次查询.所以,如果你真的有一个大型数据集,祝你好运.

此代码适用于您的示例:

data <- read.csv(text="ID,      Longitude,      Latitude
311175,  41.298437,      -72.929179
292058,  41.936943,      -87.669838
12979,   37.580956,      -77.471439")

library(ggmap)
result <- do.call(rbind,
                  lapply(1:nrow(data),
                         function(i)revgeocode(as.numeric(data[i,3:2]))))
data <- cbind(data,result)
data
#       ID Longitude  Latitude                                           result
# 1 311175  41.29844 -72.92918 16 Church Street South, New Haven, CT 06519, USA
# 2 292058  41.93694 -87.66984  1632 West Nelson Street, Chicago, IL 60657, USA
# 3  12979  37.58096 -77.47144    2077-2199 Seddon Way, Richmond, VA 23230, USA
Run Code Online (Sandbox Code Playgroud)

这提取了zipcode:

library(stringr)
data$zipcode <- substr(str_extract(data$result," [0-9]{5}, .+"),2,6)
data[,-4]
#       ID Longitude  Latitude zipcode
# 1 311175  41.29844 -72.92918   06519
# 2 292058  41.93694 -87.66984   60657
# 3  12979  37.58096 -77.47144   23230
Run Code Online (Sandbox Code Playgroud)