间隙填充时态栅格对象
Gap filling temporal raster objects
假设我有 4 个栅格图层,每个栅格图层属于一个月中的每隔一周。我想使用线性插值为每一天创建新图层。在这种情况下,前 2 个栅格属于 Feb
月份 29 days
,第二个栅格属于 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)))
关于 两周前被问到。这是您的示例的改编答案。
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
值时失败。它"need at least two non-NA values to interpolate"。这是一个解决方法:
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)
假设我有 4 个栅格图层,每个栅格图层属于一个月中的每隔一周。我想使用线性插值为每一天创建新图层。在这种情况下,前 2 个栅格属于 Feb
月份 29 days
,第二个栅格属于 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)))
关于
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
值时失败。它"need at least two non-NA values to interpolate"。这是一个解决方法:
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)