首页 > 解决方案 > 使用 R 中 Raster 包中的分位数函数计算栅格堆栈的第一个和第三个四边形

问题描述

我正在使用以下代码在 R 中使用光栅包中的分位数函数进行四分位数计算。我的光栅图像堆栈有 307 个图像,所有图像都有一些无数据值。我只想要输出而不考虑 No Data 值。我尝试了以下代码:

    library(raster)    
    raster_data<-list.files(path= getwd() , pattern= "\\.tif$", all.files=FALSE,
    full.names=TRUE,recursive=TRUE) 
    s <- stack(raster_data)
    quantile(s, na.rm = TRUE)

输出:

分位数

                   0% 25% 50% 75% 100%

    X2008001h25v06 NA  NA  NA  NA   NA

    X2008002h25v06 NA  NA  NA  NA   NA

    X2008003h25v06 NA  NA  NA  NA   NA

    X2008004h25v06 NA  NA  NA  NA   NA

    X2008005h25v06 NA  NA  NA  NA   NA

    X2008006h25v06 NA  NA  NA  NA   NA
      --------------   
     -----------------  so on 

为什么这个 NA NA NA NA NA 值是输出而不是四分位数。

标签: rr-raster

解决方案


这是一个有效的示例:

library(raster)
fn <- system.file("external/test.grd", package="raster")
s <- stack(fn, fn)
quantile(s)

#            0%      25%     50%      75%    100%
#test.1 128.434 293.2325 371.412 499.8195 1805.78
#test.2 128.434 293.2325 371.412 499.8195 1805.78

可以通过以下方式获得相同的结果(使用较小的数据集):

t(apply(values(s), 2, quantile, na.rm=TRUE))

所以你需要找出你的文件有什么不同。

我能想到的唯一方法是返回 NA 的分位数是当所有值都是 NA 时:

quantile(rep(NA, 10), na.rm=TRUE)
# 0%  25%  50%  75% 100% 
# NA   NA   NA   NA   NA 

因此,您文件中的所有值似乎都是NA. 情况可能并非如此,但是如果没有其中一个文件,就很难解决这个问题。


推荐阅读