Ubah beberapa SpatialPointsDataFrames menjadi raster

9

Ada 100 SpatialPointsDataFrames di ruang kerja saya. Saya memuatnya dengan cara ini:

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

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

Mereka disebut seperti ini:

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

dll.

Bagaimana saya bisa mengubahnya menjadi raster yang berulang melalui Workspace?

Saya adalah pengguna R yang sangat baru dan berharap dapat menemukan bantuan. Terima kasih banyak.

Trisula
sumber
1
Edit posting Anda untuk menentukan apakah poin Anda ada di grid biasa atau jika Anda membutuhkan interpolasi
Etienne Racine

Jawaban:

9

Jika data Anda berisi data xyz (di mana z adalah nilai raster) dan poin Anda berada di grid biasa (tidak perlu interpolasi).

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

Jika Anda membutuhkan interpolasi, Anda dapat menggunakan perpustakaan 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)

Sekarang, untuk melakukan ini secara berurutan Anda hanya perlu membungkusnya dalam satu forlingkaran (Saya telah mencoba untuk sedekat mungkin dari informasi yang Anda berikan dalam pertanyaan Anda):

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
sumber
Saya akan menyarankan untuk tidak menggunakan travel@data(atau menggunakan @sama sekali), karena ini bergantung pada nama internal dari a SpatialPointsDataFrame, yang mungkin berubah. Saya sarankan menggunakan as.data.frame, yang tidak bergantung pada nama-nama internal ini.
Paul Hiemstra
Poin yang bagus. Saya sudah mengubahnya. Saya suka penggunaan slot karena lebih ringkas, tetapi Anda benar.
Etienne Racine
5

Selain jawaban @ Etiennebr, saya akan menggunakan loop gaya terapkan (yang lebih R-ish, dan menggunakan lebih sedikit kode untuk hal yang sama):

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
sumber
Hoi Paul, terima kasih banyak atas jawabannya !! Metode Anda jauh lebih mudah daripada yang saya temukan. Jika Anda tertarik dengan metode saya, beri tahu saya. Salam, Livia