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.

Tridente
fuente
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
}
Etienne Racine
fuente
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")])
})
Paul Hiemstra
fuente
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