R语言NetCDF格式数据的读写

常用函数:

nc_open 打开.nc文档

nc_close 关闭.nc文档

nc_create 新建.nc文档

ncvar_get 读取变量数据

ncatt_get 读取变量属性

ncvar_def 设定变量

ncdim_def 设定维度

ncvar_add 添加变量

ncvar_put 写入变量数据

ncatt_put 写入变量属性

一、读取.nc格式数据

1、nc_open的用法:

nc_open( filename, write=FALSE, readunlim=TRUE, verbose=FALSE, auto_GMT=TRUE, suppress_dimvals=FALSE )

nc_open用于打开已存在的.nc文档。在仅对数据进行读取操作的情况下,我们只需输入路径参数filename,其他参数保持默认值即可。(如果数据很大,为了减少运行时间也可将readunlim设置为FALSE)

2、ncatt_get的用法

ncatt_get( nc, varid, attname=NA, verbose=FALSE )

ncatt_get用于查看所选变量的属性。其中,参数nc是即将进行读取操作的数据集,其数据类型需是ncdf4型(即用nc_open或nc_create函数生成的数据);参数varid是要读取的变量名,其数据类型需是character型;参数attname是要读取的属性名,其数据类型需是character型;参数verbose决定是否输出debug信息,一般保持默认值即可。

3、ncvar_get的用法

ncvar_get(nc, varid=NA, start=NA, count=NA, verbose=FALSE, signedbyte=TRUE, collapse_degen=TRUE)

ncvar_get用于提取所选变量的数据。其中,参数nc是即将进行读取操作的.nc数据集,其数据类型需是ncdf4型;参数varid是要读取的变量名,其数据类型需是character型;参数start是读取的起始位置;参数count是数据读取的总个数;一般情况下,剩余3个参数保持默认值就可以。

4、nc_close的用法

nc_close( nc )

在读完或者写完,特别是写完一个.nc文档之后,一定记得关闭它。

示例代码如下:


  • library(ncdf4) #加载ncdf4包

  • setwd('E:\\')#设置工作目录

  • nc<-nc_open('E:\\GOSIF_GPP_2001.M01_Mean.nc') #打开.NC文档,并将其赋值给nc这个变量

  • print(nc)  #输出.nc文档信息摘要

  • 67c3efe4cf13478d98306030a52b70ca.png

 

  1. 结果显示,我的nc数据包含1个数据变量GPP,以及2个维度数据latitude、longitude,除此之外,数据集的4个全局属性对整个数据集起说明的作用。

我们将这个数据集赋值给nc这个变量,通过class()函数我们可以看到nc的数据类型是ncdf4型。
 
 
​从上一步的结果中得知,数据集共有3个变量GPP、latitude、longitude,下面以latitude为例演示对数据属性的提取。
 
示例代码如下:
 
ncatt_get( nc = nc, varid = 'latitude' ) #输出latitude的属性
 
 
​如果只想输出其单位(units),则:
 
ncatt_get( nc, 'latitude', 'units' )
 
 
​​下面以latitude和sst为例演示如何读取变量中的数据。如果想读取变量的所有数据,则只需给出nc和varid参数值,以latitude为例:
 
lat <- ncvar_get( nc = nc, varid = 'latitude')
利用ncvar_get读取的数据是array型的,接下来的计算就可以用R处理了。
45875d0ccb1e4846a342c56d4a48f5a6.png

 

 
​读取完数据之后,记得及时关闭文档:
 
nc_close( nc )

二、写入.nc格式数据

 
1、nc_create的用法
 
nc_create( filename, vars, force_v4=FALSE, verbose=FALSE )
 
nc_create用于创建新的.nc文档。其中,参数filename表示输出路径,vars表示文档中的变量,其数据类型需是ncvar4型(即由ncvar_def函数创建的数据),或者ncvar4型数据构成的list(数据有多个时);force_v4参数如果设置为TRUE,则表明创建的是ncdf4型文档(新版本的),FALSE表示创建的ncdf型文档。
 
2、ncvar_def的用法
 
ncvar_def( name, units, dim, missval, longname=name, prec="float", shuffle=FALSE, compression=NA, chunksizes=NA, verbose=FALSE )
 
ncvar_def用于创建新的变量。其中,参数name表示变量名,其数据类型需是character型;units便是变量的单位,其数据类型需是character型;dim表示变量的维度,其数据类型需是ncdim4型(即由ncdim_def函数创建的数据)或由ncdim4构成的list(维度为多个时);missval表示缺失值,如不需要可以不填,填NA则表示缺失值用NaN表示;longname表示更详细的名字,数据类型需是character型,默认值与name一致;prec表示数据的精度,可填’short’、’integer’、’float’、’double’或’char’;一般情况下,剩余变量可以保持默认值。
 
3、ncdim_def的用法
 
ncdim_def( name, units, vals, unlim=FALSE, create_dimvar=TRUE, calendar=NA, longname=name )
 
ncdim_def用于创建新的维度。其中,参数name表示维度名,其数据类型需是character型;units便是维度的单位,其数据类型需是character型;vals表示维度的值,数据类型需是numeric型向量;longname表示更详细的名字;calendar一般仅在维度是时间时设置,表示日期的计数方式,一般有"standard" ("gregorian")、"noleap" ("365_day")以及"360_day"三种选择;一般情况下,剩余变量可以保持默认值。
 
4、ncvar_add的用法
 
ncvar_add( nc, v, verbose=FALSE, indefine=FALSE )
 
ncvar_add用于给已经存在的.nc文档添加新的变量。其中,参数nc是即将进行添加操作的.nc数据集,其数据类型需是ncdf4型;v表示新添加的变量,其数据类型需是ncvar4型。
 
5、ncvar_put的用法
 
ncvar_put( nc, varid, vals, start=NA, count=NA, verbose=FALSE )
 
ncvar_put用于给新建的变量添加数据。其中,参数nc是即将进行添加操作的.nc数据集,其数据类型需是ncdf4型;varid表示进行添加数据操作的变量,其数据类型需是ncvar4型;vals表示数据值;start表示写入数值的起始位置(用法与ncvar_get相同);count表示写入数值的数目(用法与ncvar_get相同)。
 
6、ncatt_put的用法
 
ncatt_put( nc, varid, attname, attval, prec=NA, verbose=FALSE, definemode=FALSE )
 
ncatt_put用于给新建的变量或整个文档添加属性。其中,参数nc是即将进行添加操作的.nc数据集,其数据类型需是ncdf4型;varid表示进行添加数据操作的变量,其数据类型需是ncvar4型(varid设为0则表示给整个文档添加全局属性);attname表示属性名称;attval表示属性值;prec表示属性值的精度。
 
接下来,用一个例子说明上述函数的用法。在第一部分“读取.nc格式数据”,我们读取了2009年1月-12月的NINO3区sst数据,我们将其输出命名为“NINO3_2009.nc”,代码如下:
 
#创建维度,分别是time、longitude、latitude
 
longitude <- ncdim_def( name = 'longitude', units = 'degrees_east', vals = seq(-149.5,-90.5,1) )
 
latitude <- ncdim_def( name = 'latitude', units = 'degrees_north', vals = seq(4.5,-4.5,-1) )
 
t <- ncdim_def( name = 'time', units = 'months', vals = 1:12 )
 
#创建变量sst
 
sst <- ncvar_def( name = 'sst', units = 'C', dim = list(longitude,latitude,t), missval = NA, prec = 'double' )
 
#创建文档,命名为NINO3_2009.nc,只包含1个数据变量sst
 
ncnew <- nc_create( filename = 'NINO3_2009.nc', vars = sst )


longitude <- ncdim_def( name = 'longitude', units = 'degrees_east', vals = seq(-149.5,-90.5,1) )

latitude <- ncdim_def( name = 'latitude', units = 'degrees_north', vals = seq(4.5,-4.5,-1) )

t <- ncdim_def( name = 'time', units = 'months', vals = 1:12 )

#创建变量sst

sst <- ncvar_def( name = 'sst', units = 'C', dim = list(longitude,latitude,t), missval = NA, prec = 'double' )

#创建文档,命名为NINO3_2009.nc,只包含1个数据变量sst

ncnew <- nc_create( filename = 'NINO3_2009.nc', vars = sst )

#写入数据

ncvar_put( nc = ncnew, varid = sst, vals = sst_nino3 )

#写入属性

ncatt_put( nc = ncnew, varid = 0, attname = 'description', attval = 'sst data in NINO3 area during 2009')

#写入数据
 
ncvar_put( nc = ncnew, varid = sst, vals = sst_nino3 )
 
#写入属性
 
ncatt_put( nc = ncnew, varid = 0, attname = 'description', attval = 'sst data in NINO3 area during 2009')
8b0f9edf646044e6aafcd057563c0117.png

7acda2d5c25b49bc94c0064b91d42608.png 

 

#最后别忘了关闭.nc文档
 
nc_close(ncnew)
 
#完成之后,读取文档检查一下
 
nc <- nc_open('NINO3_2009.nc')
 
print(nc)
 
nc_close(nc)
 
结果如下:
备注:转载自偷闲阁,并适当修改,如有侵权请联系我。
  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值