首页 > 解决方案 > 您如何将大型 RasterStack 对象临时插入到更高的周期性(每周到每天)

问题描述

在 R 中,我试图在每周时间间隔创建的堆栈之间插入到每日时间间隔。插值方法可以是最近邻或线性插值。

我已经看到这可以使用 na.approx 或样条线对时间序列完成。

另外,如果可能,我想将对象保留为堆栈(无数据框)。

#Dummy example
#---#

library(raster) 

# Create date sequence 
idx <- seq(as.Date("2000/1/1"), as.Date("2000/12/31"), by = "week") 

# Create raster stack and assign dates 
r <- raster(ncol=20, nrow=20) 
s <- stack(lapply(1:length(idx), function(x) setValues(r, 
runif(ncell(r))))) 
s <- setZ(s, idx) 

# Do interpolation to daily resolution
# (Perhaps it should be done one by one, perhaps all at once...)
# ...

假设我的实际堆栈尺寸为 c(20,20,52),结果的尺寸为 c(20,20,366)。

感谢您的帮助

标签: rstackraster

解决方案


您需要编写一个函数f,为向量(单元格)执行此操作,例如s[1]。然后使用 应用此函数calc,如calc(s, f)

这是一个使用approx, 的简单示例,可以用样条线或其他插值器替换

library(raster) 
r <- raster(ncol=20, nrow=20) 
s <- stack(lapply(1:length(idx), function(x) setValues(r, runif(ncell(r))))) 
idx <- seq(as.Date("2000/1/1"), as.Date("2000/12/31"), by = "week") 
dr <- seq(as.Date("2000/1/1"), as.Date("2000/12/31"), by = "day") 

f <- function(x) approx(idx, x, dr, rule=2)$y
# test <- f(s[1])

x <- calc(s, f)

一个单元格的结果

plot(dr, as.vector(x[1]), pch="+")
points(idx, as.vector(s[1]), pch=20, col="red", cex=2)
lines(idx, as.vector(s[1]), col="blue")

推荐阅读