I'm looking for a way to take zip code shapefiles and merge them into larger areas. I've looked up several links but I just can't seem to figure it out, and I keep getting stuck on the cut function in the examples that I have reviewed. All of the examples that I have been able to find use the cut function in R but they all split arbitrarily using a percentile function. I want to aggregate based on a grouping that isn't guaranteed to have a simple numerical range that defines the group. I am also curious if anyone knows why the Census data is missing some zip codes? I have pasted my code below.
Here are the links that I have already checked:
- https://www.nceas.ucsb.edu/scicomp/usecases/PolygonDissolveOperationsR
- Convert a spatial polygon object to data frame using R
- Creating new shapefile after merge operation using unionSpatialPolygons
- https://gist.github.com/mbacou/5880859
# Objective: Read Zipcode polygons (currently using census source, but it appears to missing some zipcodes: Anybody know why?),
# Merge zipcodes into 'sub counties' (an internal concept, each zipcode belongs to a single sub county) and aggregate data by that 'sub county'
# Ideally this would output a TopoJSON map
# Required packages
pacman::p_load("rgdal","rgeos","maptools","gridExtra","geojsonio")
# Import US zipcode data (original source is here: http://www2.census.gov/geo/tiger/GENZ2015/shp/cb_2015_us_zcta510_500k.zip)
us <- readOGR(dsn = "C:/Users/MyUsername/Documents/R/Data/ZipShapes", layer = "cb_2015_us_zcta510_500k")
# Create a subsetted US polygon for only AZ, simplifying for this single example
AZZips <- as.factor(85001:87000)
AZOnly <- subset(us,us@data$ZCTA5CE10 %in% AZzips)
AZOnly@data <- droplevels(AZOnly@data)
AZOnlyDF <- AZOnly@data
AZOnlyDF$ID <- row.names(AZOnly@data)
# Data frame with zip code and 'sub county' relationship
Col1 <- as.factor(
c("85938","85932","85924","85920","85930","85940","85927","85925","86502","85936","86505","86511","86545","86028","86556","86507"
,"86547","86535","86508","86512","86544","86514","86504","86549","86506","86538","86515","86540","86503","86023","86020","86036"
,"86015","86022","86044","86017","86053","86038","86024","86035","86018","85931","86045","86435","86339","86016","86052","86040"
,"86001","86005","86003","86004","86002","86046","85603","85607","85636","85643","85627","85616","85638","85670","85608","85630"
,"85625","85671","85602","85650","85632","85620","85615","85626","85635","85606","85655","85613","85617","85610","85644","85605"
,"85609","85552","85543","85548","85546","85536","85541","85553","85235","85544","85532","85542","85539","85554","85501","85502"
,"85547","85550","85545","85292","85533","85534","85357","85371","85328","85344","85325","85359","85346","85334","85348","85379"
,"85387","85311","85376","85358","85372","85382","85312","85374","85308","85373","85375","85310","85378","85342","85388","85390"
,"85383","85361","85318","85224","85246","85286","85225","85280","85249","85284","85233","85287","85226","85283","85244","85227"
,"85285","85248","85236","85295","85298","85299","85296","85234","85289","85212","85297","85082","85024","85074","85029","85022"
,"85027","85079","85050","85053","85068","85064","85061","85020","85025","85076","85072","85066","85083","85062","85054","85075"
,"85071","85032","85069","85023","85073","85063","85028","85021","85051","85067","85060","85080","85078","85290","85320","85337"
,"85306","85037","85304","85301","85035","85039","85380","85030","85363","85031","85303","85381","85307","85305","85033","85038"
,"85026","85351","85043","85335","85345","85339","85353","85036","85385","85302","85205","85216","85282","85203","85208","85215"
,"85201","85214","85206","85281","85274","85204","85211","85209","85275","85210","85202","85277","85207","85213","85327","85331"
,"85086","85087","85085","85377","85396","85340","85329","85343","85338","85323","85354","85355","85395","85309","85322","85326"
,"85392","85268","85250","85271","85261","85259","85255","85256","85267","85254","85070","85018","85269","85251","85258","85260"
,"85257","85253","85008","85266","85262","85264","85252","85263","85045","85001","85016","85007","85017","85040","85014","85042"
,"85006","85003","85019","85015","85010","85002","85046","85044","85041","85009","85012","85034","85048","85005","85011","85004"
,"85013","86443","86021","86404","86438","86433","86403","86437","86445","86405","86411","86406","86436","86409","86434","86413"
,"86402","86431","86444","86441","86412","86401","85360","86446","86426","86430","86439","86427","86429","86440","86442","86432"
,"85901","85933","86031","85929","85939","85935","86520","86047","85923","85934","86032","85902","85926","85912","85941","85942"
,"86029","85911","85937","85928","86025","86033","86034","86510","86043","86042","86054","86030","86039","85752","85706","85737"
,"85720","85719","85716","85745","85740","85714","85704","85754","85725","85731","85711","85732","85715","86704","85756","85702"
,"85728","85735","85722","85748","85746","85713","85705","85710","85741","85703","85750","85726","85730","85708","85701","85717"
,"85751","85743","85742","85734","85723","85733","85755","85749","85712","85747","85736","85718","85757","85629","85707","85622"
,"85614","85321","85652","85634","85653","85739","85658","85738","85641","85618","85219","85220","85623","85237","85218","85240"
,"85119","85243","85278","85118","85120","85143","85140","85217","85242","85142","85631","85130","85222","85294","85194","85230"
,"85293","85122","85238","85193","85223","85145","85132","85123","85231","85232","85139","85279","85128","85239","85138","85228"
,"85131","85648","85662","85637","85646","85645","85640","85624","85628","85621","85611","86334","85332","85324","86330","86332"
,"86343","86321","86357","86329","86303","86304","86323","86338","85362","86301","86315","86312","86305","86331","86302","86313"
,"86314","86327","86324","86333","86335","86342","86351","86340","86322","86336","86341","86325","86326","86320","85350","85364"
,"85366","85347","85367","85356","85333","85369","85365","85336","85349"
))
Col2 <- as.factor(
c("APA-1","APA-1","APA-1","APA-1","APA-1","APA-1","APA-1","APA-1","APA-1","APA-1","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2"
,"APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","APA-2","CNC-1","CNC-1","CNC-1"
,"CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1","CNC-1"
,"CNC-2","CNC-2","CNC-2","CNC-2","CNC-2","CNC-3","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1"
,"COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1","COH-1"
,"COH-1","GHM-1","GHM-1","GHM-1","GHM-1","GHM-1","GLA-1","GLA-1","GLA-1","GLA-1","GLA-1","GLA-1","GLA-1","GLA-1","GLA-1","GLA-1"
,"GLA-1","GLA-1","GLA-1","GLA-1","GNL-1","GNL-1","LAP-1","LAP-1","LAP-1","LAP-1","LAP-1","LAP-1","LAP-1","LAP-1","LAP-2","MAR-1"
,"MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1","MAR-1"
,"MAR-1","MAR-1","MAR-1","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10","MAR-10"
,"MAR-10","MAR-10","MAR-10","MAR-11","MAR-11","MAR-11","MAR-11","MAR-11","MAR-11","MAR-11","MAR-11","MAR-11","MAR-2","MAR-2","MAR-2"
,"MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2"
,"MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-2","MAR-20","MAR-20","MAR-20"
,"MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3"
,"MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-3","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4"
,"MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-4","MAR-5","MAR-5","MAR-5","MAR-5","MAR-5"
,"MAR-5","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6","MAR-6"
,"MAR-6","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7","MAR-7"
,"MAR-7","MAR-7","MAR-7","MAR-8","MAR-8","MAR-8","MAR-8","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9"
,"MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MAR-9","MOH-1","MOH-1"
,"MOH-1","MOH-1","MOH-1","MOH-1","MOH-1","MOH-1","MOH-1","MOH-1","MOH-1","MOH-1","MOH-2","MOH-2","MOH-2","MOH-2","MOH-2","MOH-2","MOH-2"
,"MOH-2","MOH-2","MOH-2","MOH-3","MOH-3","MOH-3","MOH-3","MOH-3","MOH-3","MOH-3","MOH-3","MOH-4","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1"
,"NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-1","NVJ-2"
,"NVJ-2","NVJ-2","NVJ-2","NVJ-2","NVJ-2","NVJ-2","NVJ-2","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1"
,"PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1"
,"PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1","PIM-1"
,"PIM-1","PIM-1","PIM-1","PIM-1","PIM-2","PIM-2","PIM-2","PIM-2","PIM-20","PIM-20","PIM-20","PIM-3","PIM-3","PIM-3","PIM-3","PIM-3"
,"PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1","PIN-1"
,"PIN-1","PIN-2","PIN-2","PIN-2","PIN-2","PIN-2","PIN-2","PIN-2","PIN-2","PIN-2","PIN-3","PIN-3","PIN-3","PIN-3","PIN-3","PIN-3","PIN-3"
,"PIN-3","PIN-3","PIN-3","PIN-3","PIN-3","PIN-3","SC-1","SC-1","SC-1","SC-1","SC-1","SC-1","SC-1","SC-1","SC-1","SC-1","YAV-1","YAV-1"
,"YAV-1","YAV-1","YAV-1","YAV-1","YAV-1","YAV-1","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2","YAV-2"
,"YAV-2","YAV-2","YAV-2","YAV-2","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-3","YAV-4","YUM-1"
,"YUM-1","YUM-1","YUM-1","YUM-1","YUM-1","YUM-1","YUM-1","YUM-1","YUM-1","YUM-1"
))
Col3 <- c(
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29,0,0,116,0,0,0,0,17,0,0,0,0,0,0,0,243,195,0,418,0,53,0,1,0,1,0,4,0,0,0
,0,1,0,2,10,0,0,4,0,17,0,0,0,0,2,0,0,1,0,0,0,0,0,59,0,0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,3,0,11,1,0,150,28,0,0,0,0,172,0,135,243,50,70
,94,16,2,102,5,182,13,0,192,0,178,291,0,231,83,192,0,189,150,0,0,0,231,0,177,110,0,213,267,0,104,149,0,112,0,101,201,129,0,179,78,0,0,0,137
,0,0,0,0,65,0,30,0,0,268,0,111,0,0,113,64,84,0,0,0,0,0,0,0,81,121,101,52,43,0,0,0,21,25,71,83,14,33,86,0,23,99,84,121,156,160,90,0,0,89,155
,0,177,94,153,77,107,0,112,123,0,130,0,160,0,92,128,0,169,99,0,242,322,44,90,42,40,107,0,0,176,93,9,27,93,0,0,155,188,186,158,0,0,229,395,4
,0,323,0,156,0,189,292,359,122,113,68,121,116,1,0,8,47,0,109,23,39,47,84,106,29,16,42,64,0,0,0,189,170,22,23,5,205,0,0,10,81,0,0,306,0,0,313
,0,0,0,0,513,12,90,0,55,0,0,7,1,0,123,0,0,211,0,1,0,96,83,345,2,53,17,0,15,0,25,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,31,66,0,21
,18,48,0,5,44,0,0,0,41,0,33,0,28,0,0,9,0,38,53,35,29,77,44,0,68,0,68,0,2,0,0,68,69,0,0,0,30,30,25,52,3,58,21,45,0,9,61,0,0,0,14,25,27,0,35
,0,3,3,1,0,1,4,52,6,0,74,61,198,149,0,12,229,0,0,16,2,11,0,0,141,5,5,4,3,50,19,0,1,70,0,40,2,191,0,6,12,0,1,5,2,0,0,0,1,0,38,0,6,0,0,0,0,0
,2,133,0,99,3,2,189,82,0,125,2,0,0,228,90,45,14,45,5,211,0,96,273,0,92,284,0,82,765,0,0,303,13,0,0,617,1,37
)
AZSubCounties<-data.frame(ZipCode = Col1, SubCounty = Col2, NumberToAggregate = Col3)
# Merge dataframes
MergedDF <- merge(AZSubCounties,AZOnlyDF,by.x="ZipCode",by.y="ZCTA5CE10",all.y=TRUE)
AZOnly@data <- MergedDF
#Plot original census zip codes
spplot(AZOnly,"NumberToAggregate",main = "Original census zip codes")
#Aggregate NumberToAggregate at the 'sub county' level
AZCoords <- coordinates(AZOnly)
AZIDs <- cut(AZCoords[,1], ????, include.lowest=TRUE)
AZOnlyDFAgg <- aggregate(MergedDF[,3], list(AZIDs), sum)
# This where I get stuck, I know that I'm supposed to union the polygons together somehow.
# I've done research but I don't understand the 'cut' examples provided and how that works together with the IDs and polygons
AZUnion <- unionSpatialPolygons(AZOnly, AZIDs)
# Reconvert data frame to SpatialPolygons
NewAZ <- SpatialPolygonsDataFrame(AZUnion, AZOnlyDFAgg)
# Output geojson file (I'd like to output TopoJSON, but geojsonio doesn't have that functionality yet)
geojson_write(NewAZ,file="C:/Users/MyUsername/Documents/R/Data/NewAZ.geojson")




NAvalues inMergedDF?sum(is.na(MergedDF)) [1] 46– iskandarblue Jan 25 '17 at 04:20