1 读取nc文件
library(ncdf4) #加载ncdf4包
setwd('F:\\data\\SSH\\') #设置工作目录
nc <- nc_open( ‘ssh2010average.nc’ ) #打开.nc文档,并将其赋值给nc这个变量
print(nc) #输出.nc文档信息摘要
#结果显示,ssh2010average.nc数据包含1个数据变量ssh,以及3个维度数据time、latitude、longitude。
#将这个数据集赋值给nc这个变量,通过class()函数我们可以看到nc的数据类型是ncdf4型。
#输出ssh的属性
ncatt_get( nc = nc, varid = 'ssh' )
#读取变量latitude和ssh
#如果想读取变量的所有数据,则只需给出nc和varid参数值:
lat <- ncvar_get( nc = nc, varid = 'latitude')
ssh_1 <- ncvar_get( nc = nc, varid = 'ssh')
#如果只想读取变量的部分数据,则还应该给出start和count参数值。
sst_2 <- ncvar_get( nc = nc, varid = 'sst', start = c(31,86,1669), count = c(60,10,1) )
#c(31,86,1669)的括号里三个值分别代表三个维度分别为[longitude,latitude,time],count代表选取的个数
#如果count值取为-1,则表示读取start之后的所有数据。
nc_close( nc ) #关闭文档
2.写入并保存nc文件
#创建维度,分别是time、longitude、latitude
lon<- ncdim_def( name = 'lon', units = 'degrees', vals = seq(0,360,1) )
lat <- ncdim_def( name = 'lat', units = 'degrees', vals = seq(90,-90,-1) )
t <- ncdim_def( name = 't', units = 'year', vals = 1 )
#也可以用上面读取的经纬度的值
lon<- ncdim_def( name = 'lon', units = 'degrees', vals = longitude )
lat <- ncdim_def( name = 'lat', units = 'degrees', vals = latitude) )
#创建变量ssh
ssh <- ncvar_def( name = 'ssh', units = 'cm', dim = list(lon,lat,t), missval = NA, prec = 'double' )
#创建文档,命名为ssh2010.nc,只包含1个数据变量ssh
ncnew <- nc_create( filename = 'ssh2010.nc', vars = ssh)
#写入数据
ncvar_put( nc = ncnew, varid = ssh, vals = ssh_2)#把上面的ssh_2的值存起来
#写入属性
ncatt_put( nc = ncnew, varid = 0, attname = 'description', attval = 'ssh data in 2010')
nc_close(ncnew) #关闭.nc文档