如何将二进制栅格聚合为R

时间:2016-08-23 13:07:34

标签: r matrix gis raster r-raster

我有一个1米分辨率的二进制光栅(r),我希望将它转换为4m分辨率的百分比值。这个新的光栅将每个像素值代表百分比,根据总频率1出来计算16像素。我查看了具有raster功能的aggregate包。但是,这不起作用。

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

2 个答案:

答案 0 :(得分:4)

由于没有名为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)

答案 1 :(得分:1)

这是一种仅使用矩阵的方法。我使用的是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]