Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将二进制光栅聚合为R中的百分比_R_Matrix_Gis_Raster_R Raster - Fatal编程技术网

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

如何将二进制光栅聚合为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

我有一个分辨率为1米的二进制光栅(r),我想将其转换为分辨率为4米的百分比值。这个新光栅的每个像素值表示百分比,根据16个像素中的1个像素的总频率计算。我查看了具有聚合功能的
光栅
包。然而,这不起作用

   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)