複数のSpatialPointsDataFramesをラスターに変換


9

ワークスペースに100個のSpatialPointsDataFrameがあります。私はそれらをこの方法でロードしました:

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

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

それらは次のように呼ばれます:

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

それらをワークスペースをループするラスターに変換するにはどうすればよいですか?

私は非常に新しいRユーザーであり、いくつかの助けを探しています。どうもありがとう。


1
投稿を編集して、ポイントが通常のグリッド上にあるか、補間が必要かを指定します
Etienne Racine

回答:


9

データにxyzデータ(zはラスター値)が含まれていて、ポイントが通常のグリッド上にある場合(補間は不要)。

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

補間が必要な場合は、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)

これを順番に行うには、forループでラップするだけです(質問で提供した情報にできるだけ近づかないようにしています)。

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
}

これは、変更される可能性のあるの内部名に依存しているため、travel@data使用@しない(またはまったく使用しない)ことをお勧めしSpatialPointsDataFrameます。as.data.frameこれらの内部名に依存しないを使用することをお勧めします。
Paul Hiemstra、2012年

いい視点ね。変更しました。スロットの方がコンパクトなので、スロットの使用が好きですが、あなたの言う通りです。
エティエンヌラシーン

5

@Etiennebrの回答に加えて、私は適用スタイルループに行きます(これはよりRっぽく、同じことに対してより少ないコードを使用します):

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")])
})

ホイポール、答えてくれてありがとう!あなたの方法は、私が考え出した方法よりもはるかに簡単です。もし私の方法に興味があれば教えてください。よろしく、Livia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.