某个条件下的栅格像元数

问题描述

我有一个二进制光栅文件,我想计算值为 1 的像素数。我如何用 R 做到这一点?

解决方法

可能有更有效的方法来做到这一点,但是:

set.seed(101)
library(raster)
r <- raster(matrix(sample(0:1,size=10000,replace=TRUE),100))
cellStats(r,function(x,...) sum(x==1))  ## 4984

实际上,如果这是一个二进制光栅,cellStats(r,sum) 也能正常工作(而且可能更快?)

,

Ben Bolker 的解决方案,但随后使用 terraraster 的替代品)

set.seed(101)
library(terra)
r <- rast(matrix(sample(0:1,100))
global(r,sum)
#       sum
#lyr.1 4984

要计算非二进制栅格中 1 的数量,并考虑 NA,我更喜欢

global(r==1,sum,na.rm=TRUE)

结束

global(r,function(x) sum(x==1,na.rm=TRUE))

因为前者也适用于非常大的栅格,因为“sum”是一个可以分块计算的已知函数。