over_query_limit - R convertir código postal o lat/long al condado
massive geocoding (4)
Coincidencia de códigos postales a los condados es difícil. (Ciertos códigos postales abarcan más de un condado y, a veces, más de un estado. Por ejemplo, 30165)
No tengo conocimiento de ningún paquete R específico que pueda coincidir con estos.
Sin embargo, puede obtener una buena tabla del Centro de datos del censo de Missouri.
Puede usar lo siguiente para la extracción de datos: http://bit.ly/S63LNU
Una salida de muestra podría verse como:
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
...
Tenga en cuenta el condado2. La explicación de los metadatos se puede encontrar 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.
Consulte también los códigos del condado de ANSI http://www.census.gov/geo/www/ansi/ansi.html
Tengo una lista de ubicaciones que contiene una ciudad, estado, código postal, latitud y longitud para cada ubicación.
Tengo por separado una lista de indicadores económicos a nivel de condado. He jugado con el paquete de zipcode
, el paquete ggmap
y varios otros sitios web de geocodificación gratuitos, incluidos los archivos de Gazeteer de EE. UU., Pero parece que no se puede encontrar una forma de combinar las dos piezas.
¿Hay actualmente algún paquete u otra fuente que haga esto?
Creo que el paquete "no censo" es útil.
correspondiente es lo que uso para hacer coincidir el código postal con el condado
### 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)
Terminé usando la sugerencia de JoshO''Brien
mencionada anteriormente y encontrada here .
Tomé su código y cambié de state
a county
como se muestra aquí:
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
Una opción simple es usar la función ggmap
geocode()
en ggmap
, con la opción output="more"
o output="all
.
Esto puede tomar una entrada flexible, como la dirección o lat / lon, y devuelve Dirección, ciudad, condado, estado, país, código postal, etc., como una lista.
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"
Otra solución es usar un archivo de forma censal y el mismo comando over()
de la pregunta. Me encontré con un problema usando el mapa base de maptools: debido a que usa el dato WGS84, en América del Norte, los puntos que se encontraban a unas pocas millas de la costa se asignaron incorrectamente y aproximadamente el 5% de mi conjunto de datos no coincidió.
intente esto, utilizando el paquete sp
y los archivos de formas Census 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