我有一个具有以下说明的RasterStack:
class : RasterStack
dimensions : 221, 121, 26741, 14976 (nrow, ncol, ncell, nlayers)
resolution : 0.25, 0.25 (x, y)
extent : 14.875, 45.125, 24.875, 80.125 (xmin, xmax, ymin, ymax)
crs : +proj=longlat +datum=WGS84
names : index_1979.01.01, index_1979.01.02, index_1979.01.03, index_1979.01.04, index_1979.01.05, index_1979.01.06, index_1979.01.07, index_1979.01.08, index_1979.01.09, index_1979.01.10, index_1979.01.11, index_1979.01.12, index_1979.01.13, index_1979.01.14, index_1979.01.15, ...
min values : 46604.85, 47328.07, 48944.12, 49320.65, 49244.67, 49516.16, 49504.01, 48959.65, 48608.90, 47603.10, 47572.72, 48564.15, 49816.92, 49078.65, 48321.72, ...
max values : 57006.81, 56968.60, 56958.67, 56976.26, 57288.55, 57535.62, 57659.48, 57581.33, 57381.65, 57052.99, 56803.95, 56854.89, 56783.50, 56739.44, 56600.52, ...
自1979年1月1日至2019年12月31日,每天有14 975层。现在,我想相对于月份取出12个堆栈,因此我想将其分成12个较小的堆栈。由于我无法正确更改堆栈的层名称,因此我想到了另一种方法。我制作了一个向量,该向量的字符数与堆栈层的字符数相同,前31个字符被命名为JAN,另外28个FEB以此类推...等等。
n<-names(stack)
nn<-substr(n,12,13)
nn<-gsub('01','JAN',nn)
nn<-gsub('02','FEB',nn)
...
nn<-gsub('12','DEC',nn).
现在我想通过向量nn来对堆栈进行子集化,如下所示: sub <-raster :: subset(stack,nn)。
希望您能理解我想要做什么。 每一个帮助表示感谢,谢谢!
答案 0 :(得分:0)
您可以尝试以下方法:
layer_name <- names(stack)
layer_name <- str_remove_all(layer_name, "[index_]")
#install.packages("lubridate")
library(lubridate)
layer_name <- ymd(layer_name)
#Create an indices to prepare it for stackApply, which takes the means for all the days of the month within each year.
indices <- format(as.Date(layer_name, format = "%Y.%m.%d"), format = "%Y.m")
raster_mean <- stackApply(stack, indices, mean)
layer_name <- names(stack)
将从栅格中获取名称,以准备月份的总和或均值str_remove_all()
会删除名称index_
中的第一个单词,以将其过滤为日期
-ymd()
将字符转换为日期格式以进行过滤Indices
选择年和月的日期格式stackApply()
使用索引,它从栅格中获取每个月内的所有天并获取平均值答案 1 :(得分:0)
n <-names(stack)
n <- c("index_1979.01.01", "index_1979.01.02", "index_1979.01.03", "index_1979.01.04", "index_1979.01.05", "index_1979.01.06", "index_1979.01.07", "index_1979.01.08", "index_1979.01.09", "index_1979.01.10", "index_1979.01.11", "index_1979.01.12", "index_1979.01.13", "index_1979.01.14", "index_1979.01.15")
nn <- as.integer(substr(n,12,13))
现在获取1月的图层
sjan <- stack[[nn == 1]]
或带有子集
subjan <-raster::subset(stack, which(nn==1))