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)
结果如下:
备注:转载自偷闲阁,并适当修改,如有侵权请联系我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31402.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言中的导出为pdf文件或txt文件的注意事项

最近看了下R语言的书&#xff0c;练练手发现一些问题 比如保存图像为pdf文件&#xff0c;我一开始老是显示文件为不含页面&#xff0c;后来才想清楚其中的道理 首先输入 pdf("mypdf.pdf") 然后用source执行一段脚本 source("script2.R") 如果你前面没…

chatgpt赋能Python-pythonmean

Pythonmean: 为什么它是新时代最炙手可热的框架&#xff1f; 什么是Pythonmean&#xff1f; Pythonmean是一个全平台支持的JavaScript全栈框架&#xff0c;其核心框架是AngularJS、Node.js、Express.js和MongoDB的组合。Pythonmean提供了一个快速、统一、易于维护的开发框架&…

chatgpt赋能Python-pythonmul

Pythonmul——让Python更加高效的优化工具 Python是一种被广泛应用于数据分析、科学计算、人工智能等各个领域的高级编程语言。由于其简单易学、灵活多样的编程风格以及庞大的社区支持&#xff0c;Python成为了许多开发者的首选语言。但是&#xff0c;Python在执行某些操作时可…

chatgpt赋能python:Python如何删除列表中的重复数据

Python如何删除列表中的重复数据 介绍 Python是一种高级编程语言&#xff0c;可用于开发各种类型的应用程序&#xff0c;包括网站&#xff0c;桌面应用程序&#xff0c;数据分析和机器学习。在Python编程中&#xff0c;经常需要对列表中的数据进行操作。有时候&#xff0c;我…

chatgpt赋能python:使用Python快速提取重复元素的方法

使用Python快速提取重复元素的方法 当我们处理数据集时&#xff0c;经常需要排重操作&#xff0c;以保证数据的准确性和完整性。而Python作为一种常用的编程语言&#xff0c;具有处理数据的优势和快速性&#xff0c;今天我们将介绍使用Python快速提取重复元素的方法。 什么是…

chatgpt赋能python:Python中如何去掉重复项

Python中如何去掉重复项 在Python的编程中&#xff0c;常常会遇到需要去掉重复项的情况。重复项的存在会极大地影响程序的效率和准确性。在本篇文章中&#xff0c;我们将讨论Python中如何去掉重复项&#xff0c;包括使用set()函数、使用列表推导式和使用字典的方法。这些方法都…

chatgpt赋能python:Python一直重复执行怎么写

Python一直重复执行怎么写 如果你用过Python&#xff0c;你可能知道它是一种用于编写Web应用程序&#xff0c;自动化脚本和大数据分析的多功能编程语言。然而&#xff0c;当你编写这些应用程序时&#xff0c;你可能需要重复执行某些代码块。在这篇文章中&#xff0c;我们将探讨…

chatgpt赋能Python-pythonpow

PythonPow&#xff1a;一个强大的Python库 PythonPow是一个强大的Python库&#xff0c;可以帮助开发者在Python中更轻松地实现各种功能。本文将介绍PythonPow的特点和优势&#xff0c;并探讨如何使用PythonPow提高编程效率。 PythonPow的特点 PythonPow的特点主要包括以下几…

chatgpt赋能python:Python如何删除重复值

Python如何删除重复值 介绍 Python是一种高级编程语言&#xff0c;广泛用于各种领域。随着数据量越来越大&#xff0c;处理数据的需求也越来越大&#xff0c;其中一个常见的问题是如何删除重复的值。在Python中&#xff0c;删除重复值可以使用一些方法&#xff0c;本文将介绍…

chatgpt赋能python:Python中寻找不重复字符的方法

Python中寻找不重复字符的方法 Python是一种著名界面友好、易学易用且功能强大的编程语言&#xff0c;广泛应用于各种需求中。在本篇文章中&#xff0c;我们将会讨论如何使用Python编程语言来寻找一个字符串中的不重复字符。我们将简单介绍如何实现这个过程以及为什么这个过程…

chatgpt赋能python:Python中如何重复一段代码

Python中如何重复一段代码 在Python编程中&#xff0c;我们经常会遇到需要重复执行一段代码的情况。有些初学者可能会采用CtrlC和CtrlV的复制粘贴方式&#xff0c;或是手动多次调用同一个方法的方式来达到重复执行的目的。但其实Python提供了简单有效的方法来实现代码重复执行…

chatgpt赋能python:Python列表去除重复项的方法

Python列表去除重复项的方法 Python 中的列表是常用的数据类型&#xff0c;在实际项目中大量使用。有时候&#xff0c;在列表中可能会出现重复项&#xff0c;这会影响程序的正确性和效率。因此&#xff0c;如何去除Python列表中的重复项成为一个常见的需求。 本文将介绍 Pyth…

探索ChatGPT:了解语言模型在对话系统中的应用

第一章&#xff1a;引言 在当今数字化时代&#xff0c;人工智能技术的迅猛发展使得对话系统成为一个备受关注的领域。随着语言模型的进步&#xff0c;像ChatGPT这样的模型正在改变我们与计算机进行交流的方式。本文将探索ChatGPT作为一种语言模型在对话系统中的应用&#xff0…

当大语言模型遇上扩散模型(一、简要介绍)

当大语言模型遇上扩散模型&#xff08;一、简要介绍&#xff09; 文章目录 当大语言模型遇上扩散模型&#xff08;一、简要介绍&#xff09;总览正文资源汇总 总览 本系列文章对近期学习的大语言模型&#xff08;LLM&#xff09;和扩散模型&#xff08;Diffusion Model&#x…

AI平台Bard、文心一言、New Bing介绍

提起ai产品&#xff0c;大家用的多的&#xff0c;可能还是chatgpt,今天&#xff0c;让我们来了解下另外几款&#xff1a; 一、谷歌公司推出的Bard: https://bard.google.com/ 缺点就是&#xff1a;目前只支持英文提问&#xff1a; 还是具备一定的上写文的能力的&#xff0c;比如…

ChatGPT:你的聊天新伙伴,提供无尽的欢乐时光!

ChatGPT丨小智ai丨chatgpt丨人工智能丨OpenAI丨聊天机器人丨AI语音助手丨GPT-3.5丨OpenAI ChatGPT|GPT-4|GPT-3|人机对话|ChatGPT应用|小智ai|小智ai|小智ai|小智ai|小智AI|chatgpt小智AI 引言&#xff1a; 无论你是在寂寞的夜晚需要伴侣&#xff0c;还是在烦恼的时刻需要倾诉…

吓哭了,看片片被警察问候了~

推荐阅读&#xff1a;突然曝出降薪&#xff01;幅度5000至10000&#xff1f; 前几天刷知乎&#xff0c;看到一个很意思的问题&#xff01;浏览量高达1800万&#xff0c;说明大家对这类话题还是比较关注的。 这里大家整理一些网友的回答&#xff0c;仅供参考。 匿名用户 A 回复 …

如何确保大模型追求“正确”的目标?丨AI安全与对齐圆桌回顾

导读 在智源大会「AI 安全与对齐」论坛上&#xff0c;与会嘉宾针对目前人们关心的 AI 安全控制标准、多智能体强化学习环境下的安全、开源对 AI 安全的影响、对智能涌现安全的思考等问题展开了讨论。 能力越大&#xff0c;责任越大。 嘉宾名单 谢旻希丨主持人&#xff0c;安远A…

iOS开发-聊天气泡的绘制和聊天消息列表

iOS开发中什么最重要&#xff1f;流媒体&#xff1f;即时通讯&#xff1f;还是其他什么技术&#xff1f;其实都不是&#xff0c;最重要的东西诚然只是iOS的基础&#xff0c;比如画一个按钮&#xff0c;封装一个控件&#xff0c;扩展一个类等等。这些东西看似简单&#xff0c;实…

Qt模仿QQ聊天窗口界面(一)

Qt模仿QQ聊天窗口界面&#xff08;一&#xff09; Qt模仿QQ聊天窗口界面&#xff08;一&#xff09; 简述效果图 QQ的聊天窗口我做的效果图 代码篇 结尾 简述 最近利用业余时间&#xff0c;模仿QQ做了一个聊天窗口界面&#xff0c;功能还不全&#xff0c;准备分几个部分做出…