R - 从大型栅格中有效创建数据帧,不包括NA值

时间:2013-11-26 18:32:56

标签: r performance gis raster

在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

谢谢!

1 个答案:

答案 0 :(得分:2)

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

我要做的是尝试使用extract

按多边形图层进行遮罩
res <- extract(raster, polygons)

然后,您将获得每个多边形的所有单元格值,并且可以在它们上运行freq