如何将二进制光栅聚合为R中的百分比
我有一个分辨率为1米的二进制光栅(r),我想将其转换为分辨率为4米的百分比值。这个新光栅的每个像素值表示百分比,根据16个像素中的1个像素的总频率计算。我查看了具有聚合功能的如何将二进制光栅聚合为R中的百分比,r,matrix,gis,raster,r-raster,R,Matrix,Gis,Raster,R Raster,我有一个分辨率为1米的二进制光栅(r),我想将其转换为分辨率为4米的百分比值。这个新光栅的每个像素值表示百分比,根据16个像素中的1个像素的总频率计算。我查看了具有聚合功能的光栅包。然而,这不起作用 newras <-aggregate(r, fact=4, fun= percent) newras这里有一个只使用矩阵的方法。我使用的是40乘40的矩阵。如果尺寸不是4的倍数,则需要考虑该方法 原始矩阵: mtx <- matrix(sample(0:1, 40^2, TRU
光栅
包。然而,这不起作用
newras <-aggregate(r, fact=4, fun= percent)
newras这里有一个只使用矩阵的方法。我使用的是40乘40的矩阵。如果尺寸不是4的倍数,则需要考虑该方法
原始矩阵:
mtx <- matrix(sample(0:1, 40^2, TRUE), 40, 40)
要获取百分比矩阵,请执行以下操作:
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)
转换为4m分辨率会将16个单元格聚合为每个新单元格,而不是4个。您的原始光栅在每个维度中是否始终有四个单元格的倍数?我的原始光栅可能没有四个单元格的倍数,但我可以调整其大小以匹配4m分辨率。请给出一个可复制的示例,以便更容易帮助您无需下载数据。你需要在你的问题中树立一个榜样。这是你的问题,你不应该让别人做不必要的工作。
sum(mtx[1:4, 5:8])/16*100
pcts[1, 2]
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)
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)