填充时间栅格对象的差距

时间:2015-10-26 17:45:37

标签: r time-series raster

假设我有4个栅格图层,每个栅格图层属于该月的其他每周。我想使用线性插值为每一天创建新图层。在这种情况下,属于Feb 29 days月份的前2个栅格和第2个栅格属于March 31 days。我想知道如何创建每日光栅对象,可以考虑当月的天数(2月为29个栅格,3月为31个栅格)来填充时间段。谢谢!

library(raster)
r1 <- raster(nrow=5, ncol=5)
feb15 <- setValues(r1, runif(ncell(r1)))
feb29 <- setValues(r1, runif(ncell(r1)))
mar15 <- setValues(r1, runif(ncell(r1)))
mar30 <- setValues(r1, runif(ncell(r1)))

1 个答案:

答案 0 :(得分:1)

关于两周前问same question的问题。以下是适合您示例的答案。

library(raster)
r1 <- raster(nrow=5, ncol=5)
feb15 <- setValues(r1, runif(ncell(r1)))
feb29 <- setValues(r1, runif(ncell(r1)))
mar15 <- setValues(r1, runif(ncell(r1)))
mar30 <- setValues(r1, runif(ncell(r1)))

s <- stack(feb15, feb29, mar15, mar30)
x <- calc(s, fun=function(y) approx(c(15,29,29+15,29+30), y, 1:59, rule=2)$y)
names(x) <- c(paste('feb', 1:29), paste('march', 1:30))

不幸的是,approx在只获得NA值时失败。它需要至少两个非NA值来插值&#34;。这是一个解决方法:

s[1:2] <- NA
# fail <- calc(s, fun=function(y) approx(c(15,29,29+15,29+30), y, 1:59, rule=2)$y)

f <- function(y) {
    if (sum(! is.na(y)) < 2) {
        return(rep(NA, 59))
    } else {
        approx(c(15,29,29+15,29+30), y, 1:59, rule=2)$y
    }
}

x <- calc(s, fun=f)