для l oop через Google Geocode (), но пропустить идентичные округа, чтобы уменьшить количество запросов API Google - PullRequest
1 голос
/ 28 февраля 2020

Может ли кто-нибудь помочь мне реализовать в этом операторе if для l oop, чтобы пропустить идентичные названия стран. Т.е. Испания повторяется несколько раз в этом примере, но нужно только один раз спросить об API, поскольку существуют ограничения на службу API Google. Тем не менее, я хочу каждый раз вставлять длинный лат для Испании или других повторяющихся имен.

к сожалению, вам нужен собственный ключ, иначе код не запустится.

register_google(key='your key')
t<-data.frame(importer_country=c("spain", "spain", "spain","united states","spain","eswatini", "spain", "spain", "spain", "spain", "spain", "spain", "spain"))
t$importer_country<-as.character(t$importer_country)
for(i in 1:nrow(t)){
  result <- geocode(t$importer_country[i], output = "latlon", source = "google")
  t$importer_lon[i] <- as.numeric(result[1])
  t$importer_lat[i] <- as.numeric(result[2])
}
head(t)

1 Ответ

1 голос
/ 28 февраля 2020

Простое решение - создать новый фрейм данных с уникальным набором имен. Извлеките запрошенные данные, а затем объедините данные сокращенного кадра данных с исходным набором данных.

#Create a subset dataframe with unique country names
library(tibble)  #improved data frames
reducedt <- tibble(importer_country = t[!duplicated(t$importer_country), ])

#run function as is with reduced subset
for(i in 1:nrow(reducedt)){
  result <- geocode(reducedt$importer_country[i], output = "latlon", source = "google")
  reducedt$importer_lon[i] <- as.numeric(result[1])
  reducedt$importer_lat[i] <- as.numeric(result[2])
}

#join the two data frames together.
library(dplyr)
finalnanswer <- left_join(t, reducedt)

Также обратите внимание, что функция geocode, скорее всего, векторизована, поэтому вы, вероятно, можете избежать необходимости в l * 1014. *.

Редактировать
Векторизация geocode() функция. Используйте самую последнюю версию "ggmap" версии> = 3.0.0.901 (в более ранней версии функции geocode есть ошибка)

reducedt <- tibble(importer_country = t[!duplicated(t$importer_country), ])

result <- geocode(reducedt$importer_country, output = "latlon", source = "google")
reducedt<-cbind(reducedt, result)

finalnanswer <- left_join(t, reducedt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...