Rでのリサンプルと集約および拡張を使用して、解像度と範囲が一致するラスターを作成する


8

解像度と範囲が異なる2つのラスターがあります。

> res(Elevation)
[1] 0.002083333 0.002083333

> res(Ann_precip)
[1] 0.008333333 0.008333333 

> extent(Elevation)
class       : Extent 
xmin        : -15.07722 
xmax        : -7.641806 
ymin        : 7.193611 
ymax        : 12.67694 

> extent(Ann_precip)
class       : Extent 
xmin        : -15.075 
xmax        : -7.641667 
ymin        : 7.191667 
ymax        : 12.675

私の質問は、これらの2つのラスターが一致する解像度と範囲を持つために

A)raster::aggregate関数を使用する

> 0.008333333/0.002083333
[1] 4

Elevation_res<-aggregate(Elevation, fact=4, fun=mean)

そしてraster::extend機能

Elevation_res<-extend(Elevation_res, Ann_precip, values=NA)

(ただし、ここでも異なるが非常に似た範囲と解像度が得られます):

> res(Elevation_res)
[1] 0.008333333 0.008333333

> res(Ann_precip)
[1] 0.008333333 0.008333333

> res(Elevation_res)==res(Ann_precip)
[1] FALSE FALSE

> extent(Elevation_res)
class       : Extent 
xmin        : -15.07722 
xmax        : -7.635556 
ymin        : 7.193611 
ymax        : 12.67694 

> extent(Ann_precip)
class       : Extent 
xmin        : -15.075 
xmax        : -7.641667 
ymin        : 7.191667 
ymax        : 12.675 

または

b)raster::resample関数を使用する

Elevation_res<-resample(Elevation, Ann_precip, method="bilinear")

> res(Elevation_res)==res(Ann_precip)
[1] TRUE TRUE

> extent(Elevation_res)==extent(Ann_precip)
[1] TRUE

私が読んだので、私はこれを聞いてるのよWegmann(2016)ら大幅にリサンプリングするピクセル値に影響を与え、そのこと(P110)(私が正しく理解している場合)aggregate()extend()およびcrop()代わりに使用する必要があります。私の場合、解像度と範囲の違いは非常に小さいので、リサンプリングによって生じるバイアスはここでは最小限になると思いますか?

回答:


9

パッケージのresample機能をraster確認してください。場合resampleで使用される'bilinear方法は、出力がより同じものですaggregate

if (!skipaggregate) {
    rres <- res(y) / res(x)
    resdif <- max(rres)
    if (resdif > 2) {
        ag <- pmax(1, floor(rres-1))
        if (max(ag) > 1) {
            if (method == 'bilinear') {
                x <- aggregate(x, ag, 'mean')
            } else {  
                x <- aggregate(x, ag, modal)
            }
        }
    }

例では:

library(raster)

r <- raster(nrow=4,ncol=8)

r2 <- raster(nrow=2,ncol=4)

r <- setValues(r,values = 1:32)

r_agg <- aggregate(r,fact=2,fun=mean)

r_resam <- resample(r,r2,method='bilinear')

values(r_resam) == values(r_agg)
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE

values(r_resam)
## [1]  5.5  7.5  9.5 11.5 21.5 23.5 25.5 27.5

しかし、'ngb'メソッドとして使用する場合、結果は異なります(メソッドはデータに依存します。カテゴリカルである場合、使用する必要あります'ngb'):

r_resam2 <- resample(r,r2,method='ngb')

values(r_resam2)
## [1] 10 12 14 16 26 28 30 32

また、拡張しても解像度は変わりませんが、範囲は変わりません。

r
## class       : RasterLayer 
## dimensions  : 4, 8, 32  (nrow, ncol, ncell)
## resolution  : 45, 45  (x, y)
## extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 

r_ext <- extend(r,r2,values=NA)

r_ext
## class       : RasterLayer 
## dimensions  : 4, 8, 32  (nrow, ncol, ncell)
## resolution  : 45, 45  (x, y)
## extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0

crop()同様にextend()、解像度は変わりません。


@MarieL申し訳ありませんが、範囲です(単語のスペルを間違えました)
aldo_tapia '13

であるbilinearとオプションに相当meanする機能などaggregatengbと同等のオプションはmodal?変換する必要がある入力よりも解像度が粗い(ピクセルサイズが大きい)ターゲットの場合について言及しています。
user3386170

1
@ user3386170はい、これらの行を確認してください。github.com/cran/raster/blob/...を
aldo_tapia
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.