处理栅格对象时提取函数的替代方法

时间:2018-10-20 07:42:31

标签: gis raster

我想知道如何为另一个栅格(cat_r)的每个类别求和栅格(val_r)的像素值。换句话说,使用栅格对象时,是否存在“提取”功能的替代方法?非常感谢你!

# 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

1 个答案:

答案 0 :(得分:1)

您可以使用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