我有一个多波段栅格,想要计算整个波段中每个像素的累积和。这些波段包含位于不同位置的NA像素,并且如果遇到像素中的NA值,则来自栅格数据包的calc中的cumsum函数会将NA写入后续波段。最后,我在最后一个累积和带中只剩下NA个像素。 我将NA更改为零,但这导致值的低估。
是否可以将初始值用于NA?还是什至是初始值和后续值的平均值?
library(raster)
raster <- stack("inputPath")
cumulative_sum <- calc(raster, cumsum)
这是我的意思的一个例子
input band 1
1 4 7
NA 5 8
3 6 NA
input band 2
2 NA NA
3 6 9
4 7 10
input band 3
1 4 7
2 5 8
3 6 9
result with calc and cumsum
4 NA NA
NA 16 25
10 19 NA
desired output (last resulting band <- band1 + band2+ band3)
4 12 21
5 16 25
10 19 19
答案 0 :(得分:0)
使用@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)
如您所见,第1层中的任何NA
值都设置为0
,因为没有值可以结转。您也可以在calc
之前执行此操作,并从f
中删除if子句。
要进行检查,我们将其绘制出来,然后您会发现NA
已消失:
plot(is.na(r3),main=paste('Input',c(1:3)))
plot(is.na(r3c),main=paste('Cumsum',c(1:3)))