2 votos

Eliminar los puntos situados a una distancia x

Tengo estos puntos espaciales:

long <- c(-1.769717, -1.767766, -1.769170, -1.768462, -1.768389)
lat <- c(54.92214, 54.92207, 54.92113, 54.92167, 54.92165)
points <- data.frame(long, lat)
coordinates(points) <- c('long', 'lat')
proj4string(points) <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")
points <- spTransform(points, CRS("+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"))##

Puedo calcular si dos puntos cualesquiera se encuentran a menos de 20 m el uno del otro de esta forma:

points_matrix <- gWithinDistance(points, dist = 20, byid = TRUE)
diag(points_matrix) <- NA

      1     2     3     4     5
1    NA FALSE FALSE FALSE FALSE
2 FALSE    NA FALSE FALSE FALSE
3 FALSE FALSE    NA FALSE FALSE
4 FALSE FALSE FALSE    NA  TRUE
5 FALSE FALSE FALSE  TRUE    NA

Si hay dos puntos en un radio de 20 m, tengo que eliminar uno de ellos. La dirección points_matrix muestra que los puntos 4 y 5 se encuentran a menos de 20 m el uno del otro. ¿Cómo puedo eliminar 4 o 5 (no importa cuál) de points y mantener todos los demás puntos.

6voto

fastcall Puntos 874

Basta con extraer la parte triangular superior de points_matrix y utilizar las sumas de las columnas como criterio para eliminar los puntos:

points_matrix <- gWithinDistance(points, dist = 20, byid = TRUE)
points_matrix[lower.tri(points_matrix, diag=TRUE)] <- NA
points_matrix
#    1     2     3     4     5
# 1 NA FALSE FALSE FALSE FALSE
# 2 NA    NA FALSE FALSE FALSE
# 3 NA    NA    NA FALSE FALSE
# 4 NA    NA    NA    NA  TRUE
# 5 NA    NA    NA    NA    NA

colSums(points_matrix, na.rm=TRUE) == 0
#    1     2     3     4     5 
# TRUE  TRUE  TRUE  TRUE FALSE 
v <- colSums(points_matrix, na.rm=TRUE) == 0
points[v, ]
# SpatialPoints:
#         long     lat
# [1,] 3569953 3596632
# [2,] 3570075 3596604
# [3,] 3569969 3596515
# [4,] 3570024 3596567
# Coordinate Reference System (CRS) arguments: +proj=laea ...

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X