有什么方法可以从 R 中的多层栅格网格中排除某些时期的天气数据?
Any way to exclude certain periods of weather data from multi-layers raster grid in R?
我有netCDF
格式的16年日平均气温网格化数据,文件比较大(约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)))
更新:
如果有其他方便的工具可以轻松地对 netCDF
文件进行分块,我想知道该怎么做。从多层栅格网格中过滤掉我想要的每日平均温度数据的任何最快方法都适用于我。谢谢
期望输出:
我只想保留1980.1.1到1984.12.31的每日平均气温数据;我怎样才能做到这一点?如何在 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)
子集
tg_5months <- subset(tg, 1:150)
tg_5months @z$Date <- tg@z$Date[1:150]
而且做得很好。
我有netCDF
格式的16年日平均气温网格化数据,文件比较大(约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)))
更新:
如果有其他方便的工具可以轻松地对 netCDF
文件进行分块,我想知道该怎么做。从多层栅格网格中过滤掉我想要的每日平均温度数据的任何最快方法都适用于我。谢谢
期望输出:
我只想保留1980.1.1到1984.12.31的每日平均气温数据;我怎样才能做到这一点?如何在 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)
子集
tg_5months <- subset(tg, 1:150)
tg_5months @z$Date <- tg@z$Date[1:150]
而且做得很好。