在 R 中读取 netcdf,其中 lon lat 维度报告为单个一维向量

问题描述 投票:0回答:1

我需要在 R 中处理这些数据:https://zenodo.org/records/1209296特别是“灌溉用水 v2.7z”。我用 terra 和 raster 库打开了 R 内部的 netcdf。我应该有一个 480 层(月)的全球经纬度网格。但我打开它们时的格式如下。

class      : RasterLayer 
dimensions : 480, 64028, 30733440  (nrow, ncol, ncell)
resolution : 0.007481219, 1  (x, y)
extent     : 0.9962594, 480.0037, 0.5, 480.5  (xmin, xmax, ymin, ymax)
crs        : NA 
source     : withd_irr_h08.nc 
names      : withd_irr 
zvar       : withd_irr 

如何移动到二维(纬度、经度)和 480 层的栅格?分辨率为0.5°。

r netcdf r-raster
1个回答
0
投票

您的数据完全不标准且不具有自我描述性。换句话说,没有哪个图书馆能给你一站式解决方案。

使用包

ncdfCF
我看到以下文件结构:

> library(ncdfCF)

> irr <- open_ncdf("~/withd_irr_h08.nc")
> irr
<Dataset> withd_irr_h08 
Resource   : withd_irr_h08.nc 
Format     : classic 
Conventions: (not indicated) 
Keep open  : FALSE 

Variables:
 name      units    data_type axes           
 withd_irr mm/month NC_DOUBLE grid_num, month
 lon       degree   NC_DOUBLE grid_num       
 lat       degree   NC_DOUBLE grid_num       

Axes:
 id axis name     length values                      unit               
 1  T    month      480  [1971-02-01 ... 2011-01-01] months since 1971-1
 0       grid_num 64028  [1 ... 64028]

数据变量

withd_irr
不使用经纬度网格,而是具有一个轴
grid_num
,它包含 64,028 个位置,与
lon
lat
变量相同(如果
terra 则您希望将其作为轴) 
应该认出他们,但他们没有)。

问题的解决方案是提取 3 个变量的数据,将它们放入

data.frame
中,然后将其转换为
terra::SpatRaster
。您必须分别对每个月进行转换,因为各种步骤适用于矩阵,但不适用于数组:

# Read entire data arrays
> lon <- irr[["lon"]][]
> lat <- irr[["lat"]][]
> withd <- irr[["withd_irr"]][]

# Make a data.frame with lon, lat and all 480 months of withd_irr
> df <- data.frame(lon, lat, withd, check.names = FALSE)

# Convert a month of data to a SpatRaster
> r <- rast(df[c("lon", "lat", "1971-02-01")])
> r
class       : SpatRaster 
dimensions  : 279, 720, 1  (nrow, ncol, nlyr)
resolution  : 0.5, 0.5  (x, y)
extent      : -180, 180, -56, 83.5  (xmin, xmax, ymin, ymax)
coord. ref. :  
source(s)   : memory
name        : 1971-02-01 
min value   :    0.00000 
max value   :   96.28087
© www.soinside.com 2019 - 2024. All rights reserved.