1 votos

Contar el número de puntos de una línea en R

Tengo un SpatialLinesDataFrame y un SpatialPointsDataFrame. Quiero calcular el número de puntos que caen en una línea por un campo específico en el marco de datos de líneas.

Ejemplo: Tengo una red fluvial dividida en 125 fragmentos con una longitud determinada: Quiero contar el número de puntos que caen en cada uno de los 125 fragmentos. ¿Existe una función para hacer esto como poly.counts? enter image description here

0voto

Puede utilizar la función over() para emular el poly.counts que mencionaste. Seguirá existiendo el problema del redondeo de coordenadas que mencionaba @Spacedman, pero viendo la imagen que adjuntas parece que los puntos podrían coincidir. Disponer de tus datos (o de tu código) podría ayudarnos a dar una ayuda más precisa; te proporciono unas líneas principales a seguir para aplicar el over() función:

library(rgdal)
library(data.table)

rivers <- readOGR(...) # load your rivers' data
rivers@data$id <- 1:nrow(rivers) # to make sure there is data associated with your rivers' dataset
rivers@data <- data.table(rivers@data)

points <- readOGR(...) # load your SpatialPointsDataFrame

Asumiendo que cada uno de los 125 fragmentos que menciona es un objeto diferente de su SpatialLinesDataFrame se puede hacer un bucle como

rivers@data$count <- as.numeric(NA)
for (i in 1:nrow(rivers)) {
    rivers[i,'count'] <- sum(!is.na(over(points, rivers[,'id'])))
}

El over() recupera un vector con la dimensión de points que contiene el 'id' de la rivers[i,'id'] característica (cada fragmento) que se encuentra debajo de cada punto de points . Los puntos que no se encuentran sobre una línea tendrían un <NA> asociado a él. Así, sum(!is.na(...)) le proporciona el número de puntos que se han encontrado sobre el fragmento. Haciendo un bucle sobre cada fragmento, tendrá el recuento de cada uno de ellos.

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