Convierta varios SpatialPointsDataFrames en ráster


9

Hay 100 SpatialPointsDataFrames en mi espacio de trabajo. Los cargué de esta manera:

filenames <- list.files(path="",
                        pattern="XYhectareTravelTimes_ez+.*shp")

for(i in filenames){
              filepath <- file.path("/",i)
              assign(i, readShapePoints(filepath))

Se llaman así:

XYhectareTravelTimes_ez10.*shp 
XYhectareTravelTimes_ez11.*shp 
XYhectareTravelTimes_ez12.*shp 

etc.

¿Cómo puedo convertirlos en rásteres que recorren el espacio de trabajo?

Soy un nuevo usuario de R y espero encontrar ayuda. muchas gracias.


1
Edite su publicación para especificar si sus puntos están en una cuadrícula regular o si necesita interpolación
Etienne Racine

Respuestas:


9

Si sus datos contienen datos xyz (donde z es el valor de la trama) y sus puntos están en una cuadrícula regular (sin necesidad de interpolación).

library("raster")
r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])

Si necesita interpolación, puede usar la biblioteca akima:

library("raster")
library("akima")

steps <- 100
isu <- with(travel@data, interp(x, y, z, 
    xo=seq(min(x), max(x), length = steps),
    yo=seq(min(y), max(y), length = steps)
))

r <- raster(isu)

Ahora, para hacer esto secuencialmente, solo necesita envolverlo en un forbucle (he tratado de mantenerme lo más cerca posible de la información que proporcionó en su pregunta):

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

# create a container for all the rasters
raster_cat <- list()

for (i in filenames) { 
  travel <- readShapePoints(i)
  r <- rasterFromXYZ(as.data.frame(travel)[, c("x", "y", "z")])
  raster_cat[[i]] <- r
}

Aconsejaría no usar travel@data(o usar @en absoluto), ya que esto se basa en los nombres internos de a SpatialPointsDataFrame, que pueden cambiar. Sugiero usar as.data.frame, que no se basa en estos nombres internos.
Paul Hiemstra

Buen punto. Lo he cambiado Me gusta el uso de tragamonedas porque es más compacto, pero tienes razón.
Etienne Racine

5

Además de la respuesta de @ Etiennebr, elegiría un bucle de estilo de aplicación (que es más R-ish y usa menos código para lo mismo):

library("raster")

filenames <- list.files(path="", pattern="XYhectareTravelTimes_ez+.*shp")

raster_cat = lapply(filenames, function(x) {
  travel <- as.data.frame(readShapePoints(x))
  r <- rasterFromXYZ(travel[, c("x", "y", "z")])
})

Hoi Paul, muchas gracias por la respuesta !! Tu método es mucho más fácil que el que descubrí. Si estás interesado en mi método, házmelo saber. Saludos cordiales, Livia
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.