根据不同的高度查找变量的值

Finding a value for a variable according to different elevations

我有一个特定区域的 DEM 栅格文件

DEMRASTER

class      : RasterLayer 
dimensions : 47, 89, 4183  (nrow, ncol, ncell)
resolution : 0.5, 0.5  (x, y)
extent     : 60.75, 105.25, 15.75, 39.25  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      : newlowelevation1 
values     : 1, 6136.012  (min, max)

我有另一个变量“GPP”的光栅文件:

GPPRASTER
class      : RasterLayer 
dimensions : 47, 89, 4183  (nrow, ncol, ncell)
resolution : 0.5, 0.5  (x, y)
extent     : 60.75, 105.25, 15.75, 39.25  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : memory
names      : layer 
values     : -0.333333, 0  (min, max)

如何根据高程找到 GPP 栅格的值?例如,如果我想找到从 0-2000 米或 5500 到 6136 米的高程的 GPP 平均值?这将是什么基本代码?

我曾尝试根据高程从 DEM 栅格文件中删除不需要的像素,但这种方法耗时太长。我确信有一个代码,但我不能亲自动手,因为我自己是 R 的新手。提前致谢!

这是一个最小的独立的、可重现的例子:

library(raster)
elev <- raster(ncol=47, nrow=89, ext=extent(60.75, 105.25, 15.75, 39.25))
elev <- init(elev, "cell")
gdp <- flip(elev, "y")/100

解决方案:

ezones <- cut(elev, c(0,1000,2000,Inf))
zonal(gdp, ezones)
#     zone     mean
#[1,]    1 36.83058
#[2,]    2 26.83396
#[3,]    3 10.92250

terra:

library(terra)
#terra version 1.2.1
ev <- rast(ncol=47, nrow=89, ext=ext(60.75, 105.25, 15.75, 39.25))
ev <- init(ev, "cell")
gd <- flip(ev, "vertical")/100
names(gd) <- "gdp"
names(ev) <- "elevation"

解决方案:

ez <- classify(ev, c(0,1000,2000,Inf))
zonal(gd, ez)
#    elevation      gdp
#1    0 - 1000 36.83580
#2 1000 - 2000 26.84370
#3  2000 - inf 10.92752