基于具有分类和定量值的多边形和栅格的数据提取

data extraction based on polygons and rasters with categorical and quantitative values

我希望,对于 SpatialPolygonsDataFrame polyA 的每个多边形(在我的例子中,来自 wrld_simpl 或 GADM 的世界上的每个国家),以及对于分类栅格 rcat 的每个类别,求和另一个栅格的值具有定量值 rquant。最终输出将是一个包含以下列的数据框:国家名称、类别名称、总值。

我熟悉一些代码,但这些并不能完全让我找出要编写的正确脚本。有人可以帮助我吗?很抱歉在这里没有提供可重现的例子。请注意,我正在使用分辨率为 0.0083 的栅格 (ncell = 933120000),因此我认为将栅格转换为数据帧不是一个好主意。

以下脚本对每个多边形的 rquant 值求和

library(maptools)
data("wrld_simpl")
out <- extract(rquant, SpatialPolygons(wrld_simpl@polygons),na.rm=TRUE)
df <- data.frame(ISO3=wrld_simpl$ISO3, SUM=unlist(lapply(out, sum, na.rm=TRUE)))

以下脚本对每个类别的 rcat 的 rquant 值求和

zonalstats <- zonal(rquant, z=rcat, fun='sum', digits=0, na.rm=TRUE, count=T)

我最终处理数据提取的方法是首先为分类栅格 rcat 的每个类别创建一个定量栅格(其他类别下的像素的值 = NA,相关类别下的像素的 rquant 值) .然后,对于这些新栅格中的每一个,我使用 velox 包 devtools::install_github('hunzikp/velox') 提取每个多边形的信息 - 非常适合从大型数据集中提取数据。

library(raster)
library(maptools)
data("wrld_simpl")
devtools::install_github('hunzikp/velox')
library(velox)

sptmp <- SpatialPolygons(wrld_simpl@polygons)
rquantX <- raster("rquant_forcategoryXonly.tif")
Lvx <- velox(rquantX)
Lvo <- Lvx$extract(sptmp, fun = function(x) sum(x, na.rm = TRUE))
Lvo2 <- cbind(Lvo[,1], wrld_simpl@data)