假设我有4个栅格图层具有相同的扩展,数据为4年不同:2006,2008,2010和2012:
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
现在我想通过插值/外推(线性方法应该是一个良好的开端)4个栅格图层的值,在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()
或approxExtrap
似乎没什么帮助。
答案 0 :(得分:1)
一种方法是将问题分为两部分:1。首先,对栅格值执行数值插值,然后将插值应用于适当的中间栅格图层。
构思:构建栅格图层的值()的数据框,数据框的时间索引,然后将线性插值应用于这些数字。对于线性插值,我使用approxTime
包中的simecol
。
对于上面的例子,
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不执行线性外推。它只需要最接近的值,因此您需要考虑到这一点。