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

问题描述

我希望对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)