使用光栅对象时提取函数的替代方法

Alternative to extract function when working with raster objects

我想知道如何为另一个栅格 (cat_r) 的每个类别求和一个栅格 (val_r) 的像素值。换句话说,在处理光栅对象时是否存在函数 "extract" 的替代方法?非常感谢!

# sample raster with categories
cat_r<-raster(ncol=3,nrow=3, xmn=-10, xmx=10, ymn=-10, ymx=10)
cat_r[]<-c(1,2,1,3,4,3,4,4,4 ) #4 categories: 1, 2, 3 and 4

#sample raster with pixel values 
val_r <-raster(ncol=3,nrow=3, xmn=-10, xmx=10, ymn=-10, ymx=10)
val_r[]<-c(1,0,1,5,2,5,2,2,2) 

#extract function doesn't work for 
extract(val_r, cat_r, fun=sum)

#I should find the following values: category 1: 2, cat 2: 0, cat 3: 10, cat 4: 8

您可以使用zonal方法:

library(raster)
cat_r <- raster(ncol=3,nrow=3, xmn=-10, xmx=10, ymn=-10, ymx=10, vals=c(1,2,1,3,4,3,4,4,4 ))
val_r <- setValues(cat_r, c(1,0,1,5,2,5,2,2,2))

zonal(val_r, cat_r, "sum")
#     zone sum
#[1,]    1   2
#[2,]    2   0
#[3,]    3  10
#[4,]    4   8

这相当于

s <- stack(cat_r, val_r)
v <- values(s)
tapply(v[,2], v[,1], sum)

# 1  2  3  4 
# 2  0 10  8