如何使用R编写维度变量中包含字符项的netCDF文件

yc0p9oo0  于 2023-04-27  发布在  Etcd
关注(0)|答案(3)|浏览(187)

我无法弄清楚这一点,因此希望从你的身边的一些想法。
我尝试使用netcdf 4库在R中创建一个netCDF-4文件。nc文件应该包含一个变量,比如temperature(ta),它有4个维度:经度、纬度、时间和气压。
由于某些原因,我希望最后一个维度“pressure level”由字符条目组成,如“upper level”,“lower level”。不幸的是,函数ncdim_def()只允许数值而不允许字符。
我已经研究了很多东西,包括nco/cdo命令,但没有找到解决方案。有人有主意吗?
任何帮助将不胜感激!

raogr8fs

raogr8fs1#

我为我的问题找到了一个变通方法。所以你可以做的是:

  • 创建一个包含两条线的数组;rbind(“upper level”,“lower level”)
  • 为数组的ncols(dim_p1)和nrows(dim_p2)创建一个维度。重要提示:使用ncdim_def(...,create_dimvar=FALSE)
  • 使用ncvar_def(...,dim=list(dim_p1,dim_p2),prec=“char”)创建一个新变量
  • 使用ncvar_put()将数组写入变量

希望这能帮上忙。

epggiuax

epggiuax2#

documentation of ncdim_def明确指出维度变量需要是数字或整数。此外,this website建议字符通常不支持netCDF,因此这可能是一个更一般的限制,而不是特定于ncdf4包。
因此,似乎不可能使用字符向量作为维度变量,你必须用整数索引替换你的字符值。注意,你可以指定每个索引的含义作为dimvar的单位,例如:

ncdf4::ncdim_def(name = "pressure level", units = "1 = low pressure, 2 = high pressure", vals = 1:2)
lsmepo6l

lsmepo6l3#

您可以以数字形式对压力的上限和下限进行编码,即1表示压力的上限,0表示压力的下限。
这可能需要在稍后阶段解码回字符串。

相关问题