Используя предложение @Niek, вы можете реализовать его следующим образом:
library(raster)
library(zoo)
# Generate example data
set.seed(42)
r <- raster(ncols=3,nrows=3)
r3 <- do.call(stack,replicate(3,setValues(r,sample(c(runif(ncell(r)),NA),ncell(r),replace = T))))
f <- function(ii){
if(is.na(ii[1])) ii[1] <- 0
cumsum(na.locf(ii))
}
r3c <- calc(r3,fun = f)
Как видите, любые значения NA
в слое 1 установлены на 0
, так как нет значениянести вперед.Вы также можете сделать это до calc
и удалить условие if из f
.
. Чтобы проверить, мы подготовим график и вы увидите, что NA
пропали:
plot(is.na(r3),main=paste('Input',c(1:3)))
plot(is.na(r3c),main=paste('Cumsum',c(1:3)))