Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding adjacent polygons in R (neighbors)

Tags:

I'm starting with a SpatialPolygonsDataFrame which has the data to create a map of the districts of Ghana (available at http://www.diva-gis.org/datadown). I'm trying to create a matrix with the names of the districts as row and column names and 0s/1s in the interior to indicate if two districts are adjacent (neighboring) or not.

I've found several functions in spdep that seem promising, but I can't figure out how to use them for this purpose. I was able to create a "nb" file with the data using poly2nb, but am unsure how to proceed from here or even if I'm on the right track.

I'd really appreciate any help! Thank you!

like image 966
Megan E. Avatar asked Oct 22 '14 01:10

Megan E.


1 Answers

I think you're looking for gTouches:

library(rgeos) library(rgdal)  # using http://data.biogeo.ucdavis.edu/data/diva/adm/GHA_adm.zip  ghana <- readOGR("GHA_adm", "GHA_adm1")  gTouches(ghana, byid=TRUE)  ##       0     1     2     3     4     5     6     7     8     9 ## 0 FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE ## 1  TRUE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE  TRUE ## 2  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE ## 3  TRUE  TRUE  TRUE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE ## 4 FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE  TRUE FALSE ## 5 FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE FALSE ## 6 FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE ## 7 FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE ## 8 FALSE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE ## 9  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE 

On a quick glance, it looks right:

enter image description here

I'm not sure which Ghana administrative district file you are using, so that was a guess and those are in polygon order, so you'll need to poke at ghana@data and map the entries to admin district names.

like image 84
hrbrmstr Avatar answered Dec 09 '22 04:12

hrbrmstr