plotting - read shapefile in r
Encontrando polĂgonos adyacentes en R(vecinos) (2)
Por favor, no abuses de los rgeos. Esta no es una respuesta satisfactoria, no hay nombres de distrito. La pregunta original fue, en cualquier caso, trivial, ya que spdep::nb2mat()
hace esto (con un poco de cuidado con los nombres de las filas y columnas de la matriz):
library(spdep)
library(sp)
ghana <- readRDS("GHA_adm1.rds")
row.names(ghana) <- as.character(ghana$NAME_1)
nb <- poly2nb(ghana)
mat <- nb2mat(nb, style="B")
colnames(mat) <- rownames(mat)
mat
El uso de rgeos::gTouches()
puede funcionar, especialmente si se usa el argumento returnDense=FALSE
(es decir, no devuelve una matriz), pero puede fallar si se necesitan ajustes. spdep::poly2nb()
es la ruta preferida, porque hace posible el ajuste, y porque la clase nb S3 es mucho más flexible que las matrices.
Es posible cebar spdep::poly2nb()
con la salida de rgeos::gUnarySTRtreeQuery()
, que proporciona listas de polígonos con recuadros delimitadores superpuestos como vecinos candidatos. Esto maneja conjuntos de datos realmente grandes rápidamente.
También puede publicar preguntas relacionadas con R-spatial en R-sig-geo.
Estoy empezando con un SpatialPolygonsDataFrame que tiene los datos para crear un mapa de los distritos de Ghana (disponible en http://www.diva-gis.org/datadown ). Estoy tratando de crear una matriz con los nombres de los distritos como nombres de filas y columnas y 0s / 1s en el interior para indicar si dos distritos son adyacentes (vecinos) o no.
He encontrado varias funciones en spdep que parecen prometedoras, pero no puedo descubrir cómo usarlas para este propósito. Pude crear un archivo "nb" con los datos usando poly2nb, pero no estoy seguro de cómo proceder desde aquí o incluso si estoy en el camino correcto.
¡Apreciaría realmente cualquier ayuda! ¡Gracias!
Creo que estas buscando 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
En una mirada rápida, se ve bien:
No estoy seguro de qué archivo del distrito administrativo de Ghana está utilizando, por lo que fue una conjetura y están en orden de polígono, por lo que deberá marcar los ghana@data
y asignar las entradas a los nombres del distrito administrativo.