R convertir código postal o lat / long al condado

Tengo una lista de ubicaciones que contiene una ciudad, estado, código postal, latitud y longitud para cada ubicación.

Por separado tengo una lista de indicadores económicos a nivel de condado. He jugado con el paquete de zipcode , el paquete ggmap y muchos otros sitios web gratuitos de geoencoding, incluidos los archivos de Gazeteer de EE. UU., Pero parece que no se puede encontrar una manera de unir las dos piezas.

¿Hay actualmente paquetes u otras fonts que hacen esto?

Terminé usando la sugerencia de JoshO'Brien mencionada anteriormente y la encontré aquí .

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 

Coincidencia de códigos postales con 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 conozco ningún paquete R específico que pueda igualar esto.

Sin embargo, puede obtener una buena mesa del Centro de Datos del Censo de Missouri.
Puede usar lo siguiente para la extracción de datos: http://bit.ly/S63LNU

Un resultado de muestra podría ser similar a:

  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 metadatos se puede encontrar aquí .

  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, ie the county which has the 2nd largest intersection with it. Over 90% of the time this value will be blank. 

Vea también los códigos del condado de ANSI http://www.census.gov/geo/www/ansi/ansi.html

Creo que el paquete “noncensus” 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) 

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 el lat / lon, y devuelve la dirección, la ciudad, el condado, el estado, el país, el 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 shape del censo y el mismo comando over() partir de la pregunta. Me encontré con un problema al usar el mapa base de Maptools: debido a que usa el dato WGS84, en América del Norte, los puntos que se encontraban a pocas millas de la costa se mapearon incorrectamente y aproximadamente el 5% de mis datos no coinciden.

intente esto, usando el paquete sp y los archivos de forma 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 
    Intereting Posts