web-dev-qa-db-ja.com

R郵便番号または緯度/経度を郡に変換します

各場所の都市、州、郵便番号、緯度と経度を含む場所のリストがあります。

郡レベルの経済指標のリストを別に持っています。私はzipcodeパッケージ、ggmapパッケージ、およびUS Gazeteerファイルを含む他のいくつかの無料のジオコーディングWebサイトで遊んでみましたが、2つの部分を一致させる方法を見つけられないようです。

現在、これを行うパッケージまたはその他のソースはありますか?

26
screechOwl

上記のJoshO'Brienの提案を使用してしまい、- ここ が見つかりました。

私は彼のコードを受け取り、以下に示すようにstatecountyに変更しました:

library(sp)
library(maps)
library(maptools)

# The single argument to this function, pointsDF, is a data.frame in which:
#   - column 1 contains the longitude in degrees (negative in the US)
#   - column 2 contains the latitude in degrees

latlong2county <- function(pointsDF) {
    # Prepare SpatialPolygons object with one SpatialPolygon
    # per county
    counties <- map('county', fill=TRUE, col="transparent", plot=FALSE)
    IDs <- sapply(strsplit(counties$names, ":"), function(x) x[1])
    counties_sp <- map2SpatialPolygons(counties, IDs=IDs,
                     proj4string=CRS("+proj=longlat +datum=WGS84"))

    # Convert pointsDF to a SpatialPoints object 
    pointsSP <- SpatialPoints(pointsDF, 
                    proj4string=CRS("+proj=longlat +datum=WGS84"))

    # Use 'over' to get _indices_ of the Polygons object containing each point 
    indices <- over(pointsSP, counties_sp)

    # Return the county names of the Polygons object containing each point
    countyNames <- sapply(counties_sp@polygons, function(x) x@ID)
    countyNames[indices]
}

# Test the function using points in Wisconsin and Oregon.
testPoints <- data.frame(x = c(-90, -120), y = c(44, 44))

latlong2county(testPoints)
[1] "wisconsin,juneau" "oregon,crook" # IT WORKS
20
screechOwl

郵便番号を郡に一致させることは困難です。 (特定の郵便番号は、複数の郡、場合によっては複数の州にまたがっています。例:30165)

私はあなたのためにこれらを一致させることができる特定のRパッケージを知りません。

ただし、Missouri Census Data CenterからNiceテーブルを取得できます。
データ抽出には次を使用できます: http://bit.ly/S63LN

出力例は次のようになります。

    state,zcta5,ZIPName,County,County2
    01,30165,"Rome, GA",Cherokee AL,
    01,31905,"Fort Benning, GA",Russell AL,
    01,35004,"Moody, AL",St. Clair AL,
    01,35005,"Adamsville, AL",Jefferson AL,
    01,35006,"Adger, AL",Jefferson AL,Walker AL
    ...

County2に注意してください。メタデータの説明は here にあります。

    county 
    The county in which the ZCTA is all or mostly contained. Over 90% of ZCTAs fall entirely within a single county.

    county2 
    The "secondary" county for the ZCTA, i.e. the county which has the 2nd largest intersection with it. Over 90% of the time this value will be blank.

ANSI郡コードも参照 http://www.census.gov/geo/www/ansi/ansi.html

8
Ricardo Saporta

「noncensus」というパッケージが役立つと思います。

対応することは私が郡と郵便番号を一致させるために使用するものです

### code for get county based on zipcode

library(noncensus)
data(Zip_codes)
data(counties)

state_fips  = as.numeric(as.character(counties$state_fips))
county_fips = as.numeric(as.character(counties$county_fips))    
counties$fips = state_fips*1000+county_fips    
Zip_codes$fips =  as.numeric(as.character(Zip_codes$fips))

# test
temp = subset(Zip_codes, Zip == "30329")    
subset(counties, fips == temp$fips)
5
Fang Terry

簡単なオプションは、_output="more"_または_output="all_オプションを指定して、ggmapgeocode()関数を使用することです。

これは、住所や緯度/経度などの柔軟な入力を受け取ることができ、住所、市、郡、州、国、郵便番号などをリストとして返します。

_require("ggmap")
address <- geocode("Yankee Stadium", output="more")

str(address)
$ lon                        : num -73.9
$ lat                        : num 40.8
$ type                       : Factor w/ 1 level "stadium": 1
$ loctype                    : Factor w/ 1 level "approximate": 1
$ address                    : Factor w/ 1 level "yankee stadium, 1 east 161st street, bronx, ny 10451, usa": 1
$ north                      : num 40.8
$ south                      : num 40.8
$ east                       : num -73.9
$ west                       : num -73.9
$ postal_code                : chr "10451"
$ country                    : chr "united states"
$ administrative_area_level_2: chr "bronx"
$ administrative_area_level_1: chr "ny"
$ locality                   : chr "new york"
$ street                     : chr "east 161st street"
$ streetNo                   : num 1
$ point_of_interest          : chr "yankee stadium"
$ query                      : chr "Yankee Stadium"
_

別の解決策は、国勢調査シェープファイルと、質問の同じover()コマンドを使用することです。私はmaptoolsベースマップを使用して問題に遭遇しました。北米ではWGS84データムを使用しているため、海岸から数マイル以内にあるポイントが正しくマッピングされず、データセットの約5%が一致しませんでした。

spパッケージと国勢調査TIGERLineシェイプファイルを使用して、これを試してください

_counties <- readShapeSpatial("maps/tl_2013_us_county.shp", proj4string=CRS("+proj=longlat +datum=NAD83"))

# Convert pointsDF to a SpatialPoints object 
pointsSP <- SpatialPoints(pointsDF, proj4string=CRS("+proj=longlat +datum=NAD83"))

countynames <- over(pointsSP, counties)
countynames <- countynames$NAMELSAD
_
3
ano