需要帮助从 R 中的 .nc 数据集中提取仅一年的数据
Posted
技术标签:
【中文标题】需要帮助从 R 中的 .nc 数据集中提取仅一年的数据【英文标题】:Need help to extract the data of only one year from a .nc dataset in R 【发布时间】:2022-01-23 01:12:40 【问题描述】:我需要一些有关地理空间数据项目的帮助:
我下载了这个年平均气温数据集:https://psl.noaa.gov/data/gridded/data.UDel_AirT_Precip.html (this one),我需要从中获取 1990 年的数据。
我使用以下命令将数据导入 R:
ras_tempdata_v5 = raster("PATH/air.mon.mean.v501.nc")
并希望我可以选择类似的东西
tempdata_v5_90
(这里的“栅格”会再次需要还是自动成为栅格数据?)
最终只得到 1990 年的数据。但我不知道这些年份的数据集存储在哪里以及如何仅访问特定年份的数据。
This is what the dataset looks like in RSTudio.
我还安装了 Panoply (looked like this) 以了解有关变量结构的一些信息,但这也对我没有帮助。
任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:我认为您可以通过首先将数据集称为 RasterStack 来完成您所追求的目标,它只读取一点点关于栅格的数据。然后您可以查看栅格图层的命名方式。从那里,您将使用正则表达式来获取代表 1990 的所有图层的图层编号。然后只需选择您的 rasterStack 的子集,并从您想要的图层创建一个 rasterBrick。然后,您可以根据需要从环境中删除原始 rasterStack 以节省内存。下面是一个可重现的例子:
library(raster)
path<-"Path_to_your_rasters/air.mon.mean.v501.nc"
test<-stack(path)
lyrs<-names(test)
usethese<-grep(pattern="X1990",lyrs)#My machine reads each layer in with an "X", print lyrs to see if yours does the same.
MMAT<-brick(test[[usethese]])
rm(test)
【讨论】:
嗨!非常感谢,到目前为止效果很好。我没有意识到这组数据包括每日数据,我只需要 1990 年的平均数据,但从“mean_1990 很高兴它对你有用。 raster 和 terra 包都使用像mean()
这样的基本运算符优雅地处理光栅代数(罗伯特写了这两个包,所以如果你有兴趣,他可能会给你更多细节),所以我认为你添加的那行应该正是你需要我的方法或罗伯特的方法。【参考方案2】:
我会使用terra
(替换raster
);可能是这样的:
library(terra)
r <- rast("air.mon.mean.v501.nc")
i <- grep("1990", time(r))
# or something like this but that is more tricky
#i <- which((time(r) > "1989-12-31") & (time(r) < "1990-12-31"))
i
# [1] 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092
x <- r[[i]]
time(x)
# [1] "1990-01-01 UTC" "1990-02-01 UTC" "1990-03-01 UTC" "1990-04-01 UTC"
# [5] "1990-05-01 UTC" "1990-06-01 UTC" "1990-07-01 UTC" "1990-08-01 UTC"
# [9] "1990-09-01 UTC" "1990-10-01 UTC" "1990-11-01 UTC" "1990-12-01 UTC"
(否则与 Sean McKenzie 的方法相同)
【讨论】:
非常感谢!我采用了 Sean McKenzies 的方法,效果很好。但是我后来意识到,无论如何可能必须采用完全不同的方法,所以你的建议以后也可能会有所帮助!以上是关于需要帮助从 R 中的 .nc 数据集中提取仅一年的数据的主要内容,如果未能解决你的问题,请参考以下文章