提取栅格值,从最大值到累积总和到 x

Extracting raster values, from maximum, to cumulatively sum to x

我正在尝试确定加起来达到给定数量的栅格像元的位置,从最大值开始,然后向下。

例如,我的 150,000 个像元栅格的总和值为 52,000,000;

raster1 <- raster("myvalues.asc")
cellStats(raster1,sum) = 52,000,000

我可以提取第 95 个百分位以上的细胞;

q95 <- raster1
q95[q95 < quantile(q95,0.95)] <- NA
cellStats(q95,sum) = 14,132,000

如您所见,前 5% 的单元格(基于分位数计算)returns 约为 'raster1' 原始总数的 1400 万。

我想做的是预先确定总和为 10,000,000(或 x),然后对栅格单元格进行累计求和,从最大值开始向下计算,直到我拥有(并且可以绘制)所有单元格总和到 x.

我曾尝试将 'raster1' 转换为向量、排序、累积和等,但无法将其绑定回栅格。非常感谢这里的任何帮助

S

找不到编辑按钮.....

这正是我需要的东西,经过一个小时的摸索;

raster1v <- as.vector(raster1)
raster1vdesc <- sort(raster1v, decreasing=T)
raster1_10m <- raster1vdesc[cumsum(raster1vdesc)<10000000]

test <- raster1
test[!test%in%raster1_10m] <- NA
plot(test)
cellStats(test,sum) = 9,968,073

似乎可行,也许,我不知道。再优雅一点就更好了

以下是您自己的答案,但已重写以使其对其他人更有用(自包含)。我还将 %in% 更改为 <,这应该更有效率。

图书馆(光栅)

r <- raster(nr=100, nc=100)
r[] = sample(ncell(r))

rs <- sort(as.vector(r), decreasing=TRUE)
r_10m <- min( rs[cumsum(rs) < 10000000] )

test <- r 
test[test < r_10m ] <- NA
cellStats(test, sum)