假设我有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)))
答案 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)