如何将城市名称转换为时区?

时间:2017-09-09 20:58:37

标签: r latitude-longitude geocode geonames city

很抱歉,如果这是重复的,但我已经到处寻找,似乎无法找到解决我在R中遇到的具体问题的任何内容。我有一个包含城市名称的专栏:

cities <-data.frame(c("Sydney", "Dusseldorf", "LidCombe", "Portland"))
colnames(cities)[1]<-"CityName"  

理想情况下,我想为每个城市或时区添加一个带有纬度/经度的列。我尝试过使用&#34; ggmap&#34; R中的包,但我的请求超过了他们每天允许的最大请求数。我找到了#34; geonames&#34;将lat / long转换为时区的包,所以如果我得到了城市的纬度/经度,我应该可以从那里拿走它。

编辑以解决潜在的重复问题:我想在没有的情况下使用ggmap包执行此操作,因为我有太多行,并且每天有最多的请求数。

1 个答案:

答案 0 :(得分:3)

您可以从world.cities包中的maps数据中获取至少多个主要城市。

## Changing your data to a vector
cities <- c("Sydney", "Dusseldorf", "LidCombe", "Portland")

## Load up data
library(maps)
data(world.cities)

world.cities[match(cities, world.cities$name), ]
            name country.etc     pop    lat   long capital
36817     Sydney   Australia 4444513 -33.87 151.21       0
10026 Dusseldorf     Germany  573521  51.24   6.79       0
NA          <NA>        <NA>      NA     NA     NA      NA
29625   Portland   Australia    8757 -38.34 141.59       0

注意:未包括LidCombe 警告:对于许多名称,世界上有多个城市。例如,

world.cities[grep("Portland", world.cities$name), ]
          name country.etc    pop    lat    long capital
29625 Portland   Australia   8757 -38.34  141.59       0
29626 Portland         USA 542751  45.54 -122.66       0
29627 Portland         USA  62882  43.66  -70.28       0

当然,美国的两个人是波特兰,缅因州和俄勒冈州的波特兰。 match只是列出了第一个。您可能需要使用更多信息而不仅仅是名称才能获得良好的结果。