9

ggmap ライブラリの revgeodcode 関数を使用して、経度緯度座標の (長い) リストの郵便番号を取得しようとしています。

私の質問とデータはここと同じです: FOR ループで revgeocode 関数を使用します。助けが必要ですが、受け入れられた答えは私にとってはうまくいきません。

私のデータ (.csv):

ID,      Longitude,      Latitude
311175,  41.298437,      -72.929179
292058,  41.936943,      -87.669838
12979,   37.580956,      -77.471439

私は同じ手順に従います:

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)
               })

...そしてエラーメッセージを取得します:「エラー: is.numeric(location) && length(location) == 2 is not TRUE」具体的には、is.numeric(location) は FALSE です。2 を掛けることができるため、奇妙に思えます。期待される答えを得る。

どんな助けでも大歓迎です。

4

3 に答える 3

12

ここには多くの間違いがあります。

まず、緯度と経度を逆にします。指定されたデータセット内のすべての場所は南極にあります。

次に、revgeocode(...)経度と緯度をこの順序で含む長さ 2 の数値ベクトルが必要です。オブジェクトを渡していdata.frameます (これがエラーの理由です)。(1) のとおり、順序が間違っています。

3 番目に、revgeocode(...)1 日あたり 2500 クエリに制限されている Google マップ API を使用します。したがって、本当に大きなデータセットがある場合は、頑張ってください。

このコードはあなたのサンプルで動作します:

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

これにより、郵便番号が抽出されます。

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
于 2014-04-07T17:48:23.583 に答える
-2

郵便番号を抽出するには、次のように書き留めます。

>data$postal_code
于 2015-05-01T13:34:52.293 に答える