J'ai une liste d'emplacements contenant une ville, un état, une fermeture à glissière, la latitude et la longitude pour chaque emplacement.
J'ai séparément une liste d'indicateurs économiques au niveau du comté. J'ai joué avec le package zipcode
, le package ggmap
et plusieurs autres sites Web de géocodage gratuits, y compris les fichiers Gazeer US, mais ne semblent pas sembler trouver un moyen de faire correspondre les deux pièces.
Y a-t-il actuellement des paquets ou d'autres sources qui font cela?
J'ai fini par utiliser la suggestion de JoshO'Brien
mentionné ci-dessus et trouvé ici .
J'ai pris son code et j'ai changé state
à county
comme indiqué ici:
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
Les codes postaux correspondants aux comtés sont difficiles. (Certains codes postaux couvrent plus d'un comté et parfois plus d'un état. Par exemple 30165)
Je ne suis pas au courant d'un package R spécifique qui peut correspondre à ceux-ci pour vous.
Cependant, vous pouvez obtenir une belle table du centre de données du recensement du Missouri.
[.____] Vous pouvez utiliser ce qui suit pour l'extraction de données: http://bit.ly/s63ln
Un exemple de sortie pourrait ressembler à:
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
...
Notez le comté2. L'explication de métadonnées peut être trouvée ICI .
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.
Voir aussi les codes du comté d'ANSI http://www.census.gov/geo/www/ansi/ansi.html
Je pense que le colis "noncensus" est utile.
correspondant est ce que j'utilise pour faire correspondre le code postal avec le comté
### 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)
Une option simple consiste à utiliser la fonction geocode()
dans ggmap
_, avec l'option output="more"
Ou output="all
.
Cela peut prendre des entrées flexibles, telles que l'adresse ou la/lon, et renvoie l'adresse, la ville, le comté, l'état, le pays, le code postal, etc., en tant que liste.
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"
Une autre solution consiste à utiliser un fichier de formes de recensement, et la même over()
de la question. J'ai rencontré un problème en utilisant la carte de base CarteTools: car il utilise le document WGS84 Datum, en Amérique du Nord, des points situés à quelques kilomètres de la côte ont été cartographiés de manière incorrecte et environ 5% de mon ensemble de données ne correspondaient pas.
essayez ceci, en utilisant les fichiers de format sp
packages et de recensement.
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