使用terra包从Spatraster中选择特定日期

ctzwtxfj  于 2023-04-09  发布在  其他
关注(0)|答案(1)|浏览(102)

我想使用terra包,通过仅选择栅格值大于特定阈值的日期来子集SpatRaster。我通过生成具有3个图层的SpatRaster重新编写了代码(我的原始栅格是时态栅格)。不幸的是,我遇到了这个错误:[subset] no(valid)layer selected。然而,我也尝试使用subset()函数,同样的错误。

library(terra)

d <- rast(ncol=10, nrow=10, nlyr = 3)
values(d[[1]]) <- 50:ncell(d)
values(d[[2]]) <- 60:ncell(d)
values(d[[3]]) <- 70:ncell(d)

set.seed(0)
d <- d[[d>60]]## error [subset] no (valid) layer selected
vltsax25

vltsax251#

示例数据

library(terra)
d <- rast(ncol=10, nrow=10, nlyr = 10, vals=1:1000)
time(d) <- as.Date("2001-12-31") + 1:10

基于时间戳值的子集。

d[[time(d) > as.Date("2002-01-05")]]
#class       : SpatRaster 
#dimensions  : 10, 10, 5  (nrow, ncol, nlyr)
#resolution  : 36, 18  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 
#source(s)   : memory
#names       : lyr.6, lyr.7, lyr.8, lyr.9, lyr.10 
#min values  :   501,   601,   701,   801,    901 
#max values  :   600,   700,   800,   900,   1000 
#time (days) : 2002-01-06 to 2002-01-10

或者

subset(d, time(d) > as.Date("2002-01-05"))

要根据某些统计信息(如最大值)选择图层,可以先计算统计信息,然后再进行子集划分。

g <- global(d, max, na.rm=T)
subset(d, g$max > 500)

#class       : SpatRaster 
#dimensions  : 10, 10, 5  (nrow, ncol, nlyr)
#resolution  : 36, 18  (x, y)
#extent      : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#coord. ref. : lon/lat WGS 84 
#source(s)   : memory
#names       : lyr.6, lyr.7, lyr.8, lyr.9, lyr.10 
#min values  :   501,   601,   701,   801,    901 
#max values  :   600,   700,   800,   900,   1000 
#time (days) : 2002-01-06 to 2002-01-10

相关问题