如何获得一个新栅格r90
,其中只有那些值大于每个网格单元格中值的90%的值。
例如,我尝试了以下但我不确定r90
是否给了我正确的薄。
library(raster)
r1 <- raster(nrow=10, ncol=7)
r <- stack(setValues(r1, runif(ncell(r1))),
setValues(r1, runif(70 ,0.6,0.9)),
setValues(r1, runif(70 ,0.2,0.4)),
setValues(r1, runif(70 ,1,2)))
r
#calcaulte 90th percentile of each grid cells
q90fun <- function(x){quantile(x, probs = .90, na.rm=TRUE)}
q90<-calc(r,fun=q90fun)
#sort raster r with values greater than or equal to its 90th percentile
fun90gt <- function(x,y){x[x >= y]}
r90<-overlay(r,q90,fun=fun90gt)
r90
答案 0 :(得分:0)
我认为它适用于示例数据,但一般情况下可能不行,因为无法保证fun90gt
将始终返回相同数量的值(考虑关系,NA)
而不是r90 <- overlay(r, q90, fun=fun90gt)
你可以做
r90 <- overlay(r, q90, fun=function(x,y) { x[x <= y] <- NA; x })
或等效的
rr <- r > q90
r90 <- mask(r, rr, maskvalue=0)
然后或许
# r90n <- sum(rr)
r90n <- calc(r90, function(x) sum(!is.na(x)) )
r90mx <- max(r90, na.rm=TRUE)
r90mn <- min(r90, na.rm=TRUE)