有没有办法从R中的多层栅格中排除某些时段的天气数据?

有没有办法从R中的多层栅格中排除某些时段的天气数据?,r,raster,data-manipulation,R,Raster,Data Manipulation,我有16年的日平均温度网格数据,格式为netCDF格式,文件大小相当大(约3GB)。最初,我使用raster包在RasterStack对象中加载原始网格数据 我想知道,如果天气数据的时间范围不符合我的兴趣,我如何排除这些数据。更具体地说,我只想使用5年的天气数据,而这里我有15年的天气数据。如何对R中的多层光栅数据进行过滤?例如,我的原始网格数据的时间跨度为1980.1.1到1995.12.31,我只想保留1980.1.1到1984.12.31的温度数据。如何从R中的多层光栅中过滤出所需的温度网

我有16年的日平均温度网格数据,格式为
netCDF
格式,文件大小相当大(约3GB)。最初,我使用
raster
包在
RasterStack
对象中加载原始网格数据

我想知道,如果天气数据的时间范围不符合我的兴趣,我如何排除这些数据。更具体地说,我只想使用5年的天气数据,而这里我有15年的天气数据。如何对R中的多层光栅数据进行过滤?例如,我的原始网格数据的时间跨度为1980.1.1到1995.12.31,我只想保留1980.1.1到1984.12.31的温度数据。如何从R中的多层光栅中过滤出所需的温度网格?有什么可能的办法来实现这一点吗

可复制示例

r <- raster(xmn=5.75, xmx= 15, ymn = 47.25, ymx =55,res=c(0.25,0.25))
tempDat<- do.call(stack,lapply(1:5844,function(i) setValues(r,round(runif(n = ncell(r),min = -4,max = 23)))))
names(tempDat) <- paste0('X',gsub('-','.',ymd('1980.01.01') + days(1:5844)))

r我想出了自己的方法来回答这个问题:

因此,我使用了
raster::getZ()
列出所有日期,并
grep
对我只感兴趣的时间段进行了子集划分。以下是解决方案:

library(raster)
library(ncdf4)

(tg <- brick("C:\\tn_0.25deg_reg_2018.nc"))
tg_date <- getZ(tg)  
grep("2018-01-01", tg_date)
grep("2018-05-31", tg_date)
库(光栅)
图书馆(ncdf4)

(tg您可以使用
子集
,例如
子集(tempDat,paste0('X',gsub('-','X','ymd('1980.01.01')+天(1:10))
来选择10天。或者这不是您想要的吗?@d125q选择
1980.1.1
1984.12.31
之间的时间范围。您认为您的方法也适用于非常大的数据集吗(我的意思是子集)。另外,你能通过使用上述可复制的示例数据片段详细阐述你的解决方案吗?谢谢,你可以更改
天(1:10)
在我提供的示例中,您希望在控制台中选择代码并将其与示例一起粘贴的天数。至于数据集的大小:我不确定,但我不明白为什么它不会(也不能真正想出更快的方法)。@d125q我不同意您的观点,您的效率根本不高。
tg_5months <- subset(tg, 1:150)
tg_5months @z$Date <- tg@z$Date[1:150]