5

RでrandomForestsパッケージを使用する目的で、ポリゴンデータとラスターデータを1つのデータフレームにマージしたいと思います。
これには、最初にポリゴンごとの平均ラスター値を抽出することが含まれます。

これまでのところ、私は次のものを持っています:

#load libraries
library(raster)
library(rgdal)
library(sp)
library(maptools)

#import raster data 
r <- raster("myRasterdata.tif")

#import polygon data 
p <- readShapePoly("myPolydata.shp")

#extract mean raster value for each polygon
ExtractMyData <- extract(r, p, small=TRUE, fun=mean, na.rm=TRUE, df=FALSE,  nl=1, sp=TRUE)
# note I have also tried this with df=TRUE and sp=FALSE

出力は行列で、データフレームに書き込むことができます。しかし、空間座標や元のポリゴン ID がないため、出力を同じデータベースに結合する方法がわかりません。sp=TRUE 引数がこれを行うと思っていましたが、機能していないようです。

RandomForests の目的で実際にポリゴンをポイントに変換する必要があることに注意してください (重心法を使用しますか?)。そのため、ポリゴンではなくポイントに結合された平均ラスター値を結合することが本当に必要であると推測できます。

どんな提案でも大歓迎です。ありがとうございました!!

4

1 に答える 1

7

これは機能します:

library(raster)
library(sp)
library(maptools)


#import polygon data 
data(wrld_simpl)
p <- wrld_simpl

#create raster data 
r <- raster(extent(p))
r[] <- seq_len(ncell(r))


## this does it directly, adding columns "names(r)" to "p" 
p <- extract(brick(r, r * 2), p, fun = mean, na.rm = TRUE, sp = TRUE)

より手動で行うこともできます。集計関数を使用して抽出すると、単一の列ベクトルがどのように得られるかを確認してください。

p$ExtractData <- extract(r, p, fun = mean, na.rm = TRUE)

または、次のように列ごとにマルチレイヤー ラスターで作業することもできます。

b <- brick(r, r * 2)
extr <- extract(b, p, fun = mean, na.rm = TRUE)
for (i in seq_len(ncol(extr))) p[[colnames(extr)[i]]] <- extr[,i]
于 2014-03-11T21:41:06.597 に答える