[R-sig-Geo] unique spatial polygons

Roger Bivand Roger.Bivand at nhh.no
Tue May 5 18:29:26 CEST 2009


On Tue, 5 May 2009, Alina Sheyman wrote:

> 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?

Please refer to comments below:

>
> On Tue, May 5, 2009 at 10:16 AM, Alina Sheyman <alinashe at 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))
>>
                   ^^^^^^^^^^^^^^^

Maybe I'm seeing double, but there do seem to be two spRbind() calls here. 
Are they really here, or an artefact of copy&paste? I cannot reproduce the 
problem. In addition, why are you using paste() on zipmaps2$ZCTA etc. in 
the unionSpatialPolygons() calls - shouldn't you use as.character()? have 
you examined the SpatialPolygons object IDs as I've suggested earlier?

(hint sapply(slot(zipmaps1a, "polygons"), slot, "ID"))

Do you have a local source of help, you do not seem to be making progress?

Roger

>> 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.Bivand at 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.Bivand at 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 at 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.Bivand at 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.Bivand at 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.Bivand at nhh.no



More information about the R-sig-Geo mailing list