Birkaç SpatialPointsDataFrames'i raster'a dönüştürün


9

Çalışma Alanımda 100 SpatialPointsDataFrames var. Onları bu şekilde yükledim:

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

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

Bunlara şöyle denir:

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

vb.

Bunları Çalışma Alanı'nda döngü yapan rasterlere nasıl dönüştürebilirim?

Çok yeni bir R kullanıcısıyım ve yardım bulmayı umuyorum. çok teşekkürler.


1
Puanlarınızın düzenli bir ızgarada olup olmadığını veya enterpolasyona ihtiyacınız olup olmadığını belirtmek için yayınınızı düzenleyin
Etienne Racine

Yanıtlar:


9

Verileriniz xyz verileri içeriyorsa (burada z raster değeridir) ve puanlarınız düzenli bir ızgara üzerindeyse (enterpolasyona gerek yoktur).

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

İnterpolasyona ihtiyacınız varsa akima kütüphanesini kullanabilirsiniz:

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)

Şimdi, bunu sırayla yapmak için sadece bir fordöngüde sarmanız gerekiyor (sorunuzda verdiğiniz bilgilerden olabildiğince yakın kalmaya çalıştım):

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
}

Bu , değişebilecek bir a'nın dahili adlarına bağlı olduğu için travel@data(veya hiç kullanmama @) tavsiyede SpatialPointsDataFramebulunabilirim. as.data.frameBu dahili isimlere dayanmayan kullanmanızı öneririm .
Paul Hiemstra

İyi bir nokta. Ben değiştirdim. Yuva kullanımını seviyorum çünkü daha kompakt, ama haklısın.
Etienne Racine

5

@ Etiennebr'ın cevabına ek olarak, bir uygulama stili döngüsü (daha fazla R-ish olan ve aynı şey için daha az kod kullanan) için giderdim:

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, cevap için çok teşekkür ederim !! Metodunuz anladığımdan çok daha kolay. Metodumla ilgileniyorsanız bana bildirin. Saygılarımla, Livia
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.