gpt4 book ai didi

R:不同日期的栅格图层之间的插值

转载 作者:行者123 更新时间:2023-12-01 05:18:18 24 4
gpt4 key购买 nike

假设我有 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似乎没有多大帮助。

最佳答案

一种方法是将您的问题分为两部分: 1. 首先,对栅格值执行数值插值, 2. 并将插值值应用到适当的中间栅格层。

创意 :构建栅格图层 values() 的数据框,对该数据框进行时间索引,然后对这些数字应用线性插值。对于线性插值,我使用 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 不做线性外推。它只取最接近的值,因此您需要考虑到这一点。

关于R:不同日期的栅格图层之间的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18339400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com