Определить ближайшего соседа в сетке в R (пространственном)

Я хотел бы создать квадратную сетку и определить ячейки сетки, которые граничат с набором других ячеек сетки, для которых двоичная переменная принимает 1. В следующем примере я хотел бы сгенерировать вектор идентификаторов ячеек, которые граничат с идентификатором g13 и g24:

require(sp)         
grid <- GridTopology(c(0,0), c(1,1), c(5,5))    
polys <- as(grid, "SpatialPolygons")
centroids <- coordinates(polys)
id <- names(polys)
tr <- ifelse(id == "g13" | id == "g24", 1, 0)       
ex <- SpatialPolygonsDataFrame(polys, data = data.frame(id = id, tr = tr, row.names = row.names(polys)))

plot(ex)
text(coordinates(polys), labels = row.names(polys))

Таким образом, он выводит вектор для всех совпадающих g13 как (g7, g8, g9, g12, g14, g17, g18, g19) и один соответствующий g24 как (g18, g19, g20, g23, g24, g25). Любые мысли очень ценятся.


person coding_heart    schedule 07.01.2015    source источник
comment
Два poly должны быть polys (или наоборот).   -  person jbaums    schedule 07.01.2015


Ответы (1)


rgeos::gTouches идеально подходит для этого:

library(rgeos)
adj <- gTouches(polys, polys[which(ex$tr==1)], byid=TRUE)
apply(adj, 1, which)

# $g13
#  g7  g8  g9 g12 g14 g17 g18 g19 
#   7   8   9  12  14  17  18  19 
# 
# $g24
# g18 g19 g20 g23 g25 
#  18  19  20  23  25 

А поскольку все любят картинки:

plot(ex, col=ifelse(seq_along(ex) %in% c(unlist(adj), which(ex$tr==1)), 'gray', NA))
text(coordinates(polys), labels=row.names(polys))

введите описание изображения здесь

person jbaums    schedule 07.01.2015