如何将二进制栅格聚合为 R 中的百分比

How to aggregate a binary raster into percentage in R

我有一个分辨率为 1 米的二进制栅格 (r),我想将它转换为 4m 处的百分比值 resolution.This 新栅格将让每个像素值代表百分比,根据总和计算16 人中有 1 人 pixels.I 的频率查看了具有 aggregate 功能的 raster 包。但是,这不起作用。

   newras <-aggregate(r, fact=4,  fun= percent)

这是一个只使用矩阵的方法。我正在使用 40 x 40 矩阵。如果尺寸不是 4 的倍数,该方法将需要一些考虑。

原始矩阵:

mtx <- matrix(sample(0:1, 40^2, TRUE), 40, 40)

用作分组参数的索引:

inds <- Map(seq, seq(1, 37, 4), seq(4, 40, 4))

将 4 个块分成 4 个。 blockarray 有 16 行(组中的每个元素)和 100 列(代表组)。请注意,40 x 40 = 16 x 100。

blockarray <- mapply(function(i, j) mtx[i, j],
                     rep(inds, times = 10),
                     rep(inds, each = 10))

获取百分比矩阵:

pcts <- matrix(colMeans(blockarray)*100, 10, 10)

目测结果:

image(mtx, zlim = 0:1, col = c("white", "black"))
image(pcts, zlim = c(0, 100), col = colorRampPalette(c("white", "black"))(11))

结果验证:

sum(mtx[1:4, 5:8])/16*100
pcts[1, 2]

您所做的不起作用,因为没有名为 percentage 的函数。但是你可以做一个。在这种情况下,平均值是分数,因此您将其乘以 100 得到百分比。

示例数据

library(raster)
r <- raster()
set.seed(0)
values(r) <- sample(0:1, ncell(r), replace=TRUE)

汇总

a <- aggregate(r, 4, fun=function(x,...) 100 * mean(x))   
# or 
a <- 100 * aggregate(r, 4, mean)

考虑 NA 个值

r[sample(ncell(r), 0.9 * ncell(r))] <- NA

# Make a function and use it    
percentage <- function(x, ...) { x <- na.omit(x); 100 * mean(x) }
a <- aggregate(r, 4, fun=percentage)

# or do
a <- 100 * aggregate(r, 4, fun=mean, na.rm=TRUE)