ncdf4 | netCDF数据格式处理工具包(2):定义新变量


专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


上篇介绍了使用R语言读入netCDF文件并进行查询的操作,本篇介绍用户如何自定义新变量到netCDF文件中。目录如下:

  • 2 定义新变量

    • 2.1 ncdim_def函数

    • 2.2 ncvar_def函数

    • 2.3 ncvar_add和nc_create函数

    • 2.4 ncvar_put函数

    • 2.5 ncatt_put函数

2 定义新变量

只有当netCDF文件的writable = TRUE时,用户才能修改文件(添加新变量意味着要修改文件),这需要在读入数据时设置nc_open()函数的参数write = TRUE

library(ncdf4)
PM25_2014 <- nc_open("182.PM2.5_2014_total.nc",
                     write = T)

下面将根据定义新变量时使用的顺序依次介绍相关函数。

2.1 ncdim_def函数

ncdim_def()函数是使用到的第一个函数,它用于定义变量的维度。例如,上篇介绍的PM25_2014数据有三个维度:经度、纬度、时间,但它的两个变量并非都有三个维度:grid_cell_area表示格点面积,与时间无关,只有经度和纬度两个维度,emission则有三个维度。

ncdim_def()函数的语法结构如下:

ncdim_def(name, units, vals, unlim = FALSE, 
          create_dimvar = TRUE, calendar = NA,
          longname = name )
  • name:维度名称;字符串格式;

  • units:维度单位;字符串格式;

  • vals:维度值;数值向量格式。

下列代码可以分别查看emission三个维度的信息。因为前两个维度输出结果较多,这里仅展示时间维度的信息:

PM25_2014$var$emission$dim[[1]]

PM25_2014$var$emission$dim[[2]]

PM25_2014$var$emission$dim[[3]]
## $name
## [1] "time"
## 
## $len
## [1] 12
## 
## $unlim
## [1] FALSE
## 
## $group_index
## [1] 1
## 
## $group_id
## [1] 65536
## 
## $id
## [1] 2
## 
## $dimvarid
## $id
## [1] 2
## 
## $group_index
## [1] 1
## 
## $group_id
## [1] 65536
## 
## $list_index
## [1] -1
## 
## $isdimvar
## [1] TRUE
## 
## attr(,"class")
## [1] "ncid4"
## 
## $units
## [1] "YYYYMM"
## 
## $calendar
## [1] "Gregorian"
## 
## $vals
##  [1] 201401 201402 201403 201404 201405 201406 201407 201408 201409 201410
## [11] 201411 201412
## 
## $create_dimvar
## [1] TRUE
## 
## attr(,"class")
## [1] "ncdim4"

使用ncdim_def()函数定义各维度:

lon <- ncdim_def(name = "lon", units = "degrees_east",
                 vals = seq(0.05, 359.95, 0.1)) 

## 按顺序赋参,定义时可省略参数名
lat <- ncdim_def("lat", "degrees_north", seq(-89.95, 89.95, 0.1)) 
time <- ncdim_def("time", "YYYYMM", 201401:201412)

2.2 ncvar_def函数

使用ncdim_def()函数定义变量维度后,接着使用ncvar_def()函数定义变量信息。函数语法结构如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值