I'm still working on trying to combine two spatial files. So far I've done the following
zipmaps1a<- unionSpatialPolygons(zipmaps1,IDs=paste(zipmaps1$ZCTA)) zipmaps1_df<- as(zipmaps1, "data.frame") [!duplicated(zipmaps1$ZCTA), -(1:4)] row.names(zipmaps1_df)<- paste(zipmaps1_df$ZCTA) zipmaps1b <- SpatialPolygonsDataFrame(zipmaps1a,zipmaps1_df) zipmaps2a<- unionSpatialPolygons(zipmaps2,IDs=paste(zipmaps2$ZCTA)) zipmaps2_df<- as(zipmaps2, "data.frame") [!duplicated(zipmaps2$ZCTA), -(1:4)] row.names(zipmaps2_df)<- paste(zipmaps2_df$ZCTA) zipmaps2b <- SpatialPolygonsDataFrame(zipmaps2a,zipmaps2_df) I've checked both of my files and at this point they DO both contain unique id's - no duplicate records. However when I try to go ahead and combine them using zipmaps_1_2 <- spRbind(spRbind(zipmaps1b, zipmaps1a)) I get the following error message Error in spRbind(spRbind(zipmaps1b, zipmaps1a)) : error in evaluating the argument 'obj' in selecting a method for function 'spRbind' I'm not sure what else I need to specify in my spRbind command On Wed, Apr 29, 2009 at 12:32 PM, Roger Bivand <roger.biv...@nhh.no> wrote: > On Wed, 29 Apr 2009, Alina Sheyman wrote: > > Using examples in Chapter 5, I am trying to get rid of non-unique >> polygons. >> > > Actually, maybe my advice wasn't well-judged, unless you are happy to > interpret code in a fairly naked setting, you may actually need the book > text to see what is going on. The code treats a number of different issues, > not all of which are necessarily relevant for your case. > > I'm working with a Massachusetts shapefile by zips. The file consists the >> following fields >> ZCTA NAME LSAD LSAD_TRANS >> >> I've done the following to get rid of duplicate records >> >> zipmaps1_df <- as(zipmaps1, >>> "data.frame")[!duplicated(zipmaps1$LSAT_TRANS)] >>> >> # not LSAD_TRANS? > >> row.names(zipmaps1_df) <- zipmaps1_df$LSAD_TRANS >>> zipmaps1a <- SpatialPolygonsDataFrame(zipmaps1, zipmaps1_df) , >>> >> >> > I guess that you need all of the features (geometries) in zipmaps1, but > that some zipcodes have several features. Don't discard geometries unless > you know that that is what you really want to do. Even if they are not > contiguous, use: > > zipmaps1u <- unionSpatialPolygons(as(zipmaps1, "SpatialPolygons"), > as.character(zipmaps1$LSAD_TRANS)) > > to group all of the features belonging to each value of LSAD_TRANS as > Polygon objects in unique Polygons objects (with multiple features). > > The output (re. your next mail) is a SpatialPolygons object. How you then > aggregate the data.frame part of the input object is up to you. The ID > values of the Polygons objects in zipmaps1u will be the unique values of > LSAD_TRANS. Unless you need to work with attribute data, you could stay just > with SpatialPolygons objects until you are through. > > but get the following error message >> Error in SpatialPolygonsDataFrame(zipmaps1, zipmaps1_df) : >> row.names of data and Polygons IDs do not match >> >> >> How do I find out what field R is treating as Polygon ID, so that I can >> set >> my row.names to that? >> > > If you need it later on, you could look at spChFIDs as I suggested before. > > Hope this helps, > > Roger > > > >> >> On Wed, Apr 29, 2009 at 2:42 AM, Roger Bivand <roger.biv...@nhh.no> >> wrote: >> >> On Tue, 28 Apr 2009, Alina Sheyman wrote: >>> >>> I'm trying to combine two shapefiles using >>> >>>> zipmaps5 <- spRbind(zipmaps1,zipmaps2) >>>> >>>> and getting the following error message >>>> Error in spRbind(as(obj, "SpatialPolygons"), as(x, "SpatialPolygons")) : >>>> non-unique polygon IDs >>>> >>>> Does anyone know how I can get rid of duplicate polygons in a shapefile? >>>> >>>> >>> This isn't the problem. The real problem is that zipmaps1 and zipmaps2 >>> have >>> non-unique polygon IDs, so that it isn't obvious to the function what you >>> want to do. By default: >>> >>> sapply(slot(zipmaps1, "polygons"), slot, "ID") >>> >>> is set to the FID of the shapefile in readOGR() and equivalently in >>> readShapeSpatial() in maptools. These typically run 0:(n-1). For two >>> objects, they obviously overlap. Please use spChFIDs() methods in >>> maptools >>> to assign IDs that are unique for the output object; in the worst case: >>> >>> zipmaps1 <- spChFIDs(zipmaps1, paste("map1", sapply(slot(zipmaps1, >>> "polygons"), slot, "ID"), sep="_")) >>> >>> and a different "map*" string for zipmaps2 will work, but a unique, >>> meaningful ID is best. >>> >>> This is covered in detail in the code examples for Chapter 5 in our book, >>> and on the help page for ?"spChFIDs-methods". >>> >>> Hope this helps, >>> >>> Roger >>> >>> >>> thank you! >>>> >>>> [[alternative HTML version deleted]] >>>> >>>> _______________________________________________ >>>> R-sig-Geo mailing list >>>> R-sig-Geo@stat.math.ethz.ch >>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo >>>> >>>> >>>> -- >>> Roger Bivand >>> Economic Geography Section, Department of Economics, Norwegian School of >>> Economics and Business Administration, Helleveien 30, N-5045 Bergen, >>> Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 >>> e-mail: roger.biv...@nhh.no >>> >>> >>> >> > -- > Roger Bivand > Economic Geography Section, Department of Economics, Norwegian School of > Economics and Business Administration, Helleveien 30, N-5045 Bergen, > Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 > e-mail: roger.biv...@nhh.no > > [[alternative HTML version deleted]] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo