你可以使用 zonal 方法:
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