2014-03-26 16 views
12

Ich möchte eine Matrix für etwa 200 Postleitzahlen und benachbarte Postleitzahlen erstellen, die diese Postleitzahlen berühren. Die Matrix wäre 200 * 200 mit 1 für die Zellen, in denen sich die beiden Postleitzahlen berühren und 0, wenn sie keine benachbarten Postleitzahlen sind.Wie finde ich andere Postleitzahlen, die eine bestimmte Postleitzahl berühren?

Wie könnte ich eine solche Matrix erstellen oder bekommen? Vielen Dank.

Best,

+0

Es gibt eine Postleitzahl shapefile [hier] (http://www.census.gov/cgi-bin/geo/shapefiles2013/main), wenn das hilft. – jbaums

+0

Aus welchen Informationen möchten Sie das konstruieren? Hast du eine Formdatei? Vielleicht Koordinaten? –

+0

Ich habe Zugang zu einigen Shapefiles, die von jbaums verwendet werden. Aber nicht zu allen Staaten, die ich wollte. Ich denke, ich könnte die Koordinaten der Postleitzahlen manuell eingeben, wenn es darauf ankommt. Wie soll ich vorgehen? Ich wollte die Informationen für 9 Staaten und ich konnte das Shapefile für 4 Staaten bekommen, aber nicht die restlichen 5, wie ich unten erwähne. Bitte lassen Sie mich wissen, wie ich die lat lange Information verwenden kann, um diese Matrix zu erstellen. Vielen Dank. – user3435644

Antwort

11

Wenn Sie Zugriff auf eine Shape-Datei haben, ist dies relativ einfach mit Hilfe des spdep Paket.

Hier ist ein eigenständiges Beispiel kalifornische Postleitzahldaten (~ 3,5 MB Download) mit:

# load libraries 
library(rgdal) 
library(spdep) 

# download, unzip and import shapefile 
download.file('http://geocommons.com/overlays/305142.zip', {f<-tempfile()}) 
unzip(f, exdir=tempdir()) 
shp <- readOGR(tempdir(), 'tigerline_shapefile_2010_2010_state_california_2010_census_5-digit_zip_code_tabulation_area_zcta5_state-based') 

# identify neighbours for each poly 
nbs <- setNames(poly2nb(shp), shp$ZCTA5CE10) 

# convert to a binary neighbour matrix 
nbs.mat <- nb2mat(nbs, zero.policy=TRUE, style='B') 

# see?rgeos::gTouches for an alternative to the above steps 

# assign zip codes as dimension names 
dimnames(nbs.mat) <- list(shp$ZCTA5CE10, shp$ZCTA5CE10) 

Für unsere Daten-Set, das gibt eine 1769 x 1769 Matrix angibt, welche Postleitzahlen Nachbarn sind. Die ersten 10 Zeilen und 10 Spalten wie folgt aussehen:

nbs.mat[1:10, 1:10] 

##  94601 94501 94560 94587 94580 94514 94703 95601 95669 95901 
## 94601  0  1  0  0  0  0  0  0  0  0 
## 94501  1  0  0  0  0  0  0  0  0  0 
## 94560  0  0  0  0  0  0  0  0  0  0 
## 94587  0  0  0  0  0  0  0  0  0  0 
## 94580  0  0  0  0  0  0  0  0  0  0 
## 94514  0  0  0  0  0  0  0  0  0  0 
## 94703  0  0  0  0  0  0  0  0  0  0 
## 95601  0  0  0  0  0  0  0  0  0  0 
## 95669  0  0  0  0  0  0  0  0  0  0 
## 95901  0  0  0  0  0  0  0  0  0  0 

Optional, wenn Sie eine zweispaltige Matrix benachbarten Paaren von Postleitzahlen geben (dh Code zip in Spalte 1, und das benachbarte Postleitzahl in Spalte 2), können Sie Folgendes verwenden.

+0

Vielen Dank jbaums. Das ist, was ich gesucht habe. :-) Allerdings konnte ich die Shape-Dateien für KY, MS, NC, SC, TN und VA nicht finden. Wo soll ich sie finden können? Vielen Dank. – user3435644

+0

Ich bin nicht sicher, dass sie für alle Staaten einzeln bei Geocommons verfügbar sind, aber Sie könnten [diese] (ftp://ftp2.census.gov/geo/tiger/TIGER2013/ZCTA5/tl_2013_us_zcta510.zip) -Datei versuchen, die Ich stelle mir vor, dass es Postleitzahlen für _alle_ Zustände gibt. (Ich habe es nicht überprüft, da es ein 500MB-Download ist, den ich nicht besonders brauche.) – jbaums

+0

Beachten Sie auch den Unterschied zwischen Postleitzahlen und [ZIP-Code-Tabellierbereichen] (http://en.wikipedia.org/wiki/ZIP_Code_Tabulation_Area). Letztere werden in der obigen Formdatei geliefert. – jbaums