extracting simple list of adjacent neighbours
On 13/09/11 18:39, Roger Bivand wrote:
On Tue, 13 Sep 2011, Moritz Lennert wrote:
On 06/09/11 21:41, Roger Bivand wrote:
On Tue, 6 Sep 2011, Moritz Lennert wrote:
Hello,
I have a very simple problem, which I know will have a simple
solution, but I just can't get my head wrapped around it.
I have a shapefile with regions, including an attribut containing a
regional id.
I would like to extract a simple neighbourhood file, with
neighbourhood defined by simple adjacency with symmetry of
relationship in both directions.
Ideally, I would like to get something like this:
id_region_1 id_neighbour_1
id_region_1 id_neighbour_2
id_region_1 id_neighbour_3
id_region_2 id_neighbour_1
id_region_2 id_neighbour_2
id_region_3 id_neighbour_1
etc
What I've done so far:
originalmap<-readShapePoly("/path/to/shapefile.shp")
nb<-poly2nb(originalmap, row.names=originalmap$idcolumn)
Roughly: lw <- nb2listw(nb, style="B") sn <- listw2sn(lw) then the first two columns of the "spatial.neighbour" object sn (used in the S-PLUS SpatialStats module) are what you need. They can also be exported for use in Matlab.
This does give me the right format, but I don't get the ids in originalmap$idcolumn but rather the internal ids of the polygons.
example(columbus) nb <- poly2nb(columbus, row.names=as.character(columbus$NEIGNO)) lw <- nb2listw(nb, style="B") sn <- listw2sn(lw) head(sn) sn1 <- cbind(attr(sn, "region.id")[sn$from], attr(sn, "region.id")[sn$to]) head(sn1) using the region.id attribute. Hope this helps,
Yep, this gives me exactly what I was looking for. And I learned something new: never used attr() before. Is there no other way to access the region.id info in sn ? BTW: Is there any documentation about which attributes are available in these objects other than running attributes() ? Thanks in any case ! Moritz