4

2006 年、2008 年、2010 年、2012 年という 4 つの異なる年のデータを含む同じ範囲の 4 つのラスター レイヤーがあるとします。

library(raster)

r2006<-raster(ncol=3, nrow=3)
values(r2006)<-1:9

r2008<-raster(ncol=3, nrow=3)
values(r2008)<-3:11

r2010<-raster(ncol=3, nrow=3)
values(r2010)<-5:13

r2012<-raster(ncol=3, nrow=3)
values(r2012)<-7:15

ここで、2006 年から 2013 年 (またはそれ以上) の間の毎年のラスター レイヤーを作成したいと考えています。結果は次のようになります。

r2006<-raster(ncol=3, nrow=3)
values(r2006)<-1:9

r2007<-raster(ncol=3, nrow=3)
values(r2007)<-2:10

r2008<-raster(ncol=3, nrow=3)
values(r2008)<-3:11

r2009<-raster(ncol=3, nrow=3)
values(r2009)<-4:12

r2010<-raster(ncol=3, nrow=3)
values(r2010)<-5:13

r2011<-raster(ncol=3, nrow=3)
values(r2011)<-6:14

r2012<-raster(ncol=3, nrow=3)
values(r2012)<-7:15

r2013<-raster(ncol=3, nrow=3)
values(r2013)<-8:16

lm()orを使用approxExtrapしてもあまり役に立たないようです。

4

1 に答える 1

1

これを行う 1 つの方法は、問題を 2 つの部分に分けることです。1. まず、ラスター値に対して数値内挿を実行し、2. 内挿値を適切な中間ラスター レイヤーに適用します。

アイデア: ラスター レイヤーの values() のデータ フレームを作成し、そのデータ フレームのタイム インデックスを作成し、それらの数値に線形補間を適用します。線形補間にはapproxTimesimecolパッケージから使用します。

上記の例では、

library(raster)
library(simecol)    
df <- data.frame("2006" = 1:9, "2008" = 3:11, "2010" = 5:13, "2012"=7:15)

#transpose since we want time to be the first col, and the values to be columns
new <- data.frame(t(df))
times <- seq(2006, 2012, by=2)
new <- cbind(times, new)

# Now, apply Linear Interpolate for each layer of the raster
approxTime(new, 2006:2012, rule = 2)

これは与える:

#  times X1 X2 X3 X4 X5 X6 X7 X8 X9
#1  2006  1  2  3  4  5  6  7  8  9
#2  2007  2  3  4  5  6  7  8  9 10
#3  2008  3  4  5  6  7  8  9 10 11
#4  2009  4  5  6  7  8  9 10 11 12
#5  2010  5  6  7  8  9 10 11 12 13
#6  2011  6  7  8  9 10 11 12 13 14
#7  2012  7  8  9 10 11 12 13 14 15

これを格納し、各行を取得して、その年のラスター オブジェクトの値に適用できます。

注: approxTime は線形外挿を行いません。最も近い値を取るだけなので、それを考慮する必要があります。

于 2013-08-20T23:05:30.123 に答える