and for some reason I am still getting the error that I have non-unique id's eventhough i had deduped both of my files. Any idea why this would be happening?
On Tue, May 5, 2009 at 10:16 AM, Alina Sheyman <alina...@gmail.com> wrote: > > 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