Rを使用してシェープファイルで定義されたエリアの平均ラスター値を見つける方法は?


19

長年にわたる特定の月を表す一連のラスターイメージがあり、シェープファイルを使用してエリアの平均値のタイムラインを作成します。

ラスタから値を抽出し、それらを使用できる方法でRにインポートするにはどうすればよいですか?

回答:


23

コードの例を次に示します。すべてのラスタを処理するループで動作するようにこのコードを適合させることはかなり簡単です。ラスタが共通の範囲と解像度を共有している場合、ラスタスタックを作成し、スタック内のバンドをループできます。ディレクトリ内のすべてのラスターを含むベクターを特定の形式で作成するには、「list.files」を使用してこのベクターをスタックに渡すことができます。

例:

rlist=list.files(getwd(), pattern="img$", full.names=TRUE) 

r <- stack(rlist)   


    # Add required libraries
    require(raster)
    require(sp)
    require(rgdal)

    # Set working directory, raster, in and out shapefiles
    setwd("C:/test")
    inshp="MyPolys"
    outshp="PolyMeans"
    rdata <- "Year2012.img"

    # Read polygon feature class shapefile
    sdata <- readOGR(dsn=getwd(), layer=inshp)

    # Read raster
    r <- raster(rdata)

    # Extract raster values to list object
    r.vals <- extract(r, sdata)

    # Use list apply to calculate mean for each polygon
    r.mean <- lapply(r.vals, FUN=mean)

    # Join mean values to polygon data
    sdata@data <- data.frame(sdata@data, m2012=r.mean)

    # Write results
    writeOGR(sdata, getwd(), outshp, driver="ESRI Shapefile", check_exists=TRUE, 
         overwrite_layer=TRUE)

1
+1-優れたソリューション、適切にレイアウトされた完全な回答。
シンバマング

data.frame(sdata@data, m2012=r.mean)マルチポリゴンファイルがある場合:どの値に割り当てるポリゴンをどのように知っていますか?
Stophface

r.meanをsdataに正しく追加するには、最初にr.meanをリストから外さなければなりませんでした:r.mean <-unlist(lapply(r.vals、FUN = mean))
cmbarbu

6

シェープファイルをSpatialPolygonsDataFramereadOGRパッケージからの関数rgdal)に読み込みます

ラスターをRasterオブジェクトに読み込む(rasterパッケージからの機能raster

extract(raster, spdf)各ポリゴンの下のグリッドセルを取得するために使用します。その後mean、それらを実行します。

ラスターイメージのセットを繰り返します...


シェープファイルを書き出す方法(ラスター画像から抽出された値を使用)?
Stophface
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.