计算> (或<)而不是RasterBrick

时间:2018-03-11 07:53:07

标签: r raster stat percentile

如何获得一个新栅格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

1 个答案:

答案 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)