问题描述
我有一个二进制光栅文件,我想计算值为 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 的解决方案,但随后使用 terra
(raster
的替代品)
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”是一个可以分块计算的已知函数。