使用R的netcdf栅格堆栈或栅格砖的时间和地理子集

时间:2017-12-28 17:32:03

标签: r raster netcdf r-raster

对于2016年具有每日全球海面温度的以下netcdf文件,我试图(i)暂时的子集,(ii)地理上的子集,(iii)然后对每个像素采取长期手段并创建基本曲线图。

链接到文件:here

library(raster)
library(ncdf4)

在设置我的工作目录后打开netcdf

nc_data <- nc_open('sst.day.mean.2016.v2.nc')

更改时间变量,以便于解释

time <- ncdf4::ncvar_get(nc_data, varid="time")
head(time)

更改为我可以解释的日期

time_d <- as.Date(time, format="%j", origin=as.Date("1800-01-01"))

现在我想在9月1日到10月15日之间进行分组,但无法弄明白......

在时间子集之后,创建栅格砖(或堆栈)和地理子集

b <- brick('sst.day.mean.2016.v2.nc') # I would change this name to my file with time subest
地理位置

子集

b <- crop(b, extent(144, 146, 14, 16))

最后,我想在我的所有数据日中获取每个像素的平均值,将其分配给单个栅格,并制作一个简单的图...

感谢您提供任何帮助和指导。

2 个答案:

答案 0 :(得分:5)

b <- brick('sst.day.mean.2016.v2.nc')之后,我们可以输入b来查看栅格砖的信息。

b
# class       : RasterBrick 
# dimensions  : 720, 1440, 1036800, 366  (nrow, ncol, ncell, nlayers)
# resolution  : 0.25, 0.25  (x, y)
# extent      : 0, 360, -90, 90  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
# data source : C:\Users\basaw\Downloads\sst.day.mean.2016.v2.nc 
# names       : X2016.01.01, X2016.01.02, X2016.01.03, X2016.01.04, X2016.01.05, X2016.01.06, X2016.01.07, X2016.01.08, X2016.01.09, X2016.01.10, X2016.01.11, X2016.01.12, X2016.01.13, X2016.01.14, X2016.01.15, ... 
# Date        : 2016-01-01, 2016-12-31 (min, max)
# varname     : sst 

请注意,Date广告位包含从2016-01-012016-12-31的信息,这意味着Z值已经包含日期信息,我们可以使用它来对栅格砖进行子集化。

我们可以使用getZ函数来访问存储在Z值中的值。输入getZ(b)我们可以看到一系列日期。

head(getZ(b))
# [1] "2016-01-01" "2016-01-02" "2016-01-03" "2016-01-04" "2016-01-05" "2016-01-06"

class(getZ(b))
# [1] "Date"

因此,我们可以使用以下代码对栅格砖进行子集化。

b2 <- b[[which(getZ(b) >= as.Date("2016-09-01") & getZ(b) <= as.Date("2016-10-15"))]]

然后我们可以根据您提供的代码裁剪图像。

b3 <- crop(b2, extent(144, 146, 14, 16))

要计算平均值,只需使用mean函数。

b4 <- mean(b3, na.rm = TRUE)

最后,我们可以绘制平均值。

plot(b4)

enter image description here

答案 1 :(得分:1)

不在R中,只是指出从命令行在CDO中可以轻松完成子集化和平均化任务:

cdo timmean -sellonlatbox,lon1,lon2,lat1,lat2 -seldate,date1,date2 in.nc out.nc

其中lon1,lon2等定义要切出的lon-lat区域和date1,date2是日期范围。

然后,您可以将结果文件读入R以进行绘图,或者使用ncview快速查看。