r 根据预定义的时间步长计算栅格累积和
r raster cumulative sum calculation according to pre-defined time steps
我有一个包含 10 个每日栅格数据的时间序列,我需要根据参考栅格的像素值(=时间 0)计算 -5 到 +5 时间步长的累积和。
我可以计算出每年的累计金额(以下称为“sum_YY”)
step1 创建 10 个每日栅格时间序列
require(raster)
idx <- seq(as.Date("2010/1/1"), as.Date("2011/12/31"), '10 days')
r <- raster(ncol=5, nrow=5)
s <- stack(lapply(1:length(idx), function(x) setValues(r, values = sample(x = c(-5:5),size = ncell(r), replace = T))))
s <- setZ(s, idx)
步骤2按年计算累计总和
Y <- unique(format(as.Date(getZ(s), format = "X%Y.%m.%d"), format = "%Y"))
sum_YY <- stack()
for (i in Y) {
dates <- format(getZ(s), "%Y") == i
t <- calc(subset(s, which(dates)), cumsum)
sum_YY <- stack(sum_YY,t)
}
但这不是我要找的输出。
我需要根据参考栅格 'refer'.
使用 cumsum
第 3 步创建参考栅格
refer <- raster(ncol=5, nrow=5)
refer <- setValues(refer,sample(x = c(15:25),size = ncell(refer), replace = T))
“refer”栅格像素值表示时间步长“X”,我想计算每年“s stack”时间步长 X-5 到 X+5 的累计和
即如果“参考”像素值 X = 20,我需要计算每年从 15 到 25 的“s 堆栈”层的累积和。 'refer'
中的其他像素采用相同的方法
我不知道如何在计算中引入参考栅格,有帮助吗??
万分感谢!!!
我想不出一个干净的方法。但这是一种方法:
rs <- stack(refer, s)
a <- calc(rs, fun=function(x) sum(x[(x[1]-4):(x[1]+6)]))
StackSelect 是为解决此类问题而设计的,但我现在意识到它需要更多的灵活性。如果能够一次 select 多个图层并应用一个函数,那就太好了。但是你可以这样做(可能效率低下)
x <- calc(refer, function(x) (x-5):(x+5), forceapply=T)
y <- stackSelect(s, x)
z <- sum(y)
我有一个包含 10 个每日栅格数据的时间序列,我需要根据参考栅格的像素值(=时间 0)计算 -5 到 +5 时间步长的累积和。
我可以计算出每年的累计金额(以下称为“sum_YY”)
step1 创建 10 个每日栅格时间序列
require(raster)
idx <- seq(as.Date("2010/1/1"), as.Date("2011/12/31"), '10 days')
r <- raster(ncol=5, nrow=5)
s <- stack(lapply(1:length(idx), function(x) setValues(r, values = sample(x = c(-5:5),size = ncell(r), replace = T))))
s <- setZ(s, idx)
步骤2按年计算累计总和
Y <- unique(format(as.Date(getZ(s), format = "X%Y.%m.%d"), format = "%Y"))
sum_YY <- stack()
for (i in Y) {
dates <- format(getZ(s), "%Y") == i
t <- calc(subset(s, which(dates)), cumsum)
sum_YY <- stack(sum_YY,t)
}
但这不是我要找的输出。 我需要根据参考栅格 'refer'.
使用 cumsum第 3 步创建参考栅格
refer <- raster(ncol=5, nrow=5)
refer <- setValues(refer,sample(x = c(15:25),size = ncell(refer), replace = T))
“refer”栅格像素值表示时间步长“X”,我想计算每年“s stack”时间步长 X-5 到 X+5 的累计和
即如果“参考”像素值 X = 20,我需要计算每年从 15 到 25 的“s 堆栈”层的累积和。 'refer'
中的其他像素采用相同的方法我不知道如何在计算中引入参考栅格,有帮助吗??
万分感谢!!!
我想不出一个干净的方法。但这是一种方法:
rs <- stack(refer, s)
a <- calc(rs, fun=function(x) sum(x[(x[1]-4):(x[1]+6)]))
StackSelect 是为解决此类问题而设计的,但我现在意识到它需要更多的灵活性。如果能够一次 select 多个图层并应用一个函数,那就太好了。但是你可以这样做(可能效率低下)
x <- calc(refer, function(x) (x-5):(x+5), forceapply=T)
y <- stackSelect(s, x)
z <- sum(y)