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 <[email protected]> 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
[email protected]
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: [email protected]
--
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: [email protected]
_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo