¿Convertir datos de puntos en un marco de datos cuadriculado para el análisis de histograma usando R?

14

Soy muy nuevo en el uso de datos SIG y solo tengo una modesta experiencia con R. He estado leyendo sobre cómo analizar datos espaciales utilizando el libro PDF de espacial-analyst.net, así que no estoy completamente perdido, pero pensé que podría describirlo. mi problema y la gente pueden sugerir ideas.

Tengo un conjunto de datos con aproximadamente 2000 mediciones en diferentes coordenadas lat / long, aunque probablemente subdividiré este conjunto de datos ya que los datos se recopilaron durante 3 años y las condiciones cambiaron con el tiempo. Llamemos a la variable que se mide "IP".

Quiero crear un mapa de IP en el área completa en cuestión utilizando Kriging o algún otro método de interpolación en los datos de la muestra. Luego quiero crear un histograma que mida la cantidad de tierra en varios segmentos de IP. También necesitaré crear un histograma que muestre el número de muestras en cada cubeta (tenga en cuenta que una muestra podría tener una IP real más alta o más baja de lo que predice kriging para su tierra).

Sigo cómo cargar los datos en un SpatialPointsDataFrame y ejecuto un análisis de kriging, donde tengo problemas es cómo convertir esos datos en un marco de datos en cuadrícula para poder hacer el análisis de histograma.

¿Alguna sugerencia para convertir puntos en cuadrículas?

usuario1080253
fuente

Respuestas:

12

Tienes razón ... ¡es bastante fácil! El paquete "ráster" tiene algunas formas bastante directas de lidiar con la creación y manipulación de rásteres.

library(maptools)
library(raster)

# Load your point shapefile (with IP values in an IP field):
pts <- readShapePoints("pts.shp")

# Create a raster, give it the same extent as the points
# and define rows and columns:

rast <- raster()
extent(rast) <- extent(pts) # this might be unnecessary
ncol(rast) <- 20 # this is one way of assigning cell size / resolution
nrow(rast) <- 20

# And then ... rasterize it! This creates a grid version 
# of your points using the cells of rast, values from the IP field:
rast2 <- rasterize(pts, rast, pts$IP, fun=mean) 

Puede asignar el tamaño y la resolución de la cuadrícula de varias maneras: eche un vistazo a la documentación del paquete ráster.

Los valores de las celdas ráster de rasterizar se pueden calcular con una función: 'media' en el ejemplo anterior. Asegúrate de poner esto: de lo contrario, solo usa el valor de IP desde el último punto en el que se encuentra.


De un CSV:

pts <- read.csv("IP.csv")
coordinates(pts) <- ~lon+lat
rast <- raster(ncol = 10, nrow = 10)
extent(rast) <- extent(pts)
rasterize(pts, rast, pts$IP, fun = mean)
Simbamangu
fuente
Hola, esto es muy útil, pero ¿cómo se vería el código si comenzara con los puntos en un CSV simple con lat / longs en lugar de un shapefile? Las columnas en el CSV serían IP, Lat, Long, etc., etc., etc.
user1080253
Indicaste que ya has cargado los datos en un SpatialPointsDataFrame ... que es exactamente lo que ptsestá en mi ejemplo anterior. ¡Simplemente ejecute el código en su objeto SpatialPointsDataFrame!
Simbamangu
44
Esta respuesta, aunque excelente, no parece abordar lo que se necesita. (Parece ofrecer una solución para gis.stackexchange.com/questions/20018 en su lugar). El desafío es interpolar 2000 más o menos puntos, no solo asignar sus valores a las celdas ráster. Dado que el OP ya afirma haber "ejecutado un análisis de kriging", esta pregunta se reduce a extraer los valores de un ráster (digamos r) para usar en un histprocedimiento similar, que es simplemente una cuestión de expresión similar hist(getValues(r)).
whuber
@whuber - Parece que OP pregunta "dónde tengo problemas es cómo convertir esos datos en un marco de datos cuadriculado para poder hacer el análisis de histograma ... cualquier sugerencia para convertir puntos en cuadrículas" como la pregunta real, y sabe cómo para hacer un SpatialPointsDataFrame y ejecutar el kriging. Pero tienes razón, parece ser un duplicado de 20018 (a excepción de la entrada cuadriculada).
Simbamangu
Disculpas, @ user1080253 ... Leí 'grid' como 'raster' que no es correcto y no es útil para kriging; vea aquí para una mejor idea sobre cómo crear una cuadrícula regular e interpolar sus datos a esa cuadrícula.
Simbamangu
3

El paquete plotKML tiene una función llamada vect2rast. Esta función básicamente extiende la rasterizefunción disponible en el paquete ráster. La ventaja de vect2rast; sin embargo, es que no requiere entrada del lado del usuario, es decir, determina automáticamente el tamaño de celda de la cuadrícula y el cuadro delimitador en función de las propiedades del conjunto de datos de entrada. El tamaño de la celda de la cuadrícula se estima en función de la densidad / tamaño de las características en el mapa ( nndistfunción en el paquete spatstat).

library(plotKML)
Rast2 <- vect2rast(pts)

# for large data sets use SAGA GIS:
Rast2 <- vect2rast(pts, method = "SAGA")
HassanSh__3571619
fuente