抱歉在 GIS 堆栈中交叉发布类似的东西。

我正在寻找一种更有效的方法来基于 R 中的大型栅格创建频率表。

目前,我有几十个栅格,每个栅格约有 1.5 亿个像元,我需要为每个栅格创建频率表。这些栅格来自于用几百个小采样位置*掩蔽基础栅格。因此,我正在创建表格的栅格包含 ~99% NA 值。

我目前的工作方法是这样的:

    sampling_site_raster <- raster("FILE")
    base_raster <- raster("FILE")

    sample_raster <- mask(base_raster, sampling_site_raster)

    DF <- as.data.frame(freq(sample_raster, useNA='no', progress='text'))

    ### run time for the freq() process ###
    user  system elapsed
    162.60    4.85  168.40

这使用 R 光栅包中的 freq() 函数。 usaNA=no 标志将转储 NA 值。

我的问题是:

1) 是否有更有效的方法从 99% NA 值的大型栅格创建频率表?
或者
2) 与使用 mask() 相比,从基础栅格中获取值是一种更有效的方法吗? (在 ArcGIS 中使用 Mask GP 功能非常快,但仍然具有 NA 值并且是一个额外的步骤

*附加信息:sampling_site_raster 表示的样本区域是各种大小的不规则形状,随机分布在整个研究区域。在 sampling_site_raster 中,采样点被编码为 1 ,非采样区域被编码为 NA

谢谢!

最佳答案

如果您逐个栅格屏蔽栅格,您将始终获得另一个巨大的栅格。我不认为这是一种使事情更快的方法。

我要做的是尝试使用 extract 通过多边形图层进行 mask :

res <- extract(raster, polygons)

然后您将拥有每个多边形的所有单元格值,并可以对它们运行 freq

关于R - 从大栅格有效地创建数据框,不包括 NA 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20225139/

10-11 22:29
查看更多