我正在使用 R 来处理气象数据。我分两步进行:
我还有一个问题:
2- 对于某些特定的 grib 文件,使用 ncar 工具进行转换不起作用。是否有其他方法或技巧(除了转录到 netcdf 中)来读取 R 中的 grib 文件?
Dirk 回答的问题:1- 我想在 R 中自动处理许多文件。我可以在 R 中调用 ncl_convert2nc 吗?(下面由 Dirk Eddelbuettel 回答)
我已经从中下载了一个nc文件
f=open.ncdf("file.nc")
[1] "file Lfile.nc has 2 dimensions:"
[1] "Longitude Size: 1440"
[1] "Latitude Size: 720"
[1] "------------------------"
[1] "file filr.nc has 8 variables:"
[1] "short ts[Latitude,Longitude] Longname:Skin Temperature (2mm) Missval:NA"
Run Code Online (Sandbox Code Playgroud)
然后我想使用变量soil_moisture_c
A = get.var.ncdf(nc=f,varid="soil_moisture_c",verbose=TRUE)
Run Code Online (Sandbox Code Playgroud)
然后我绘制用image(A).我得到了下面显示的地图,我甚image(t(a))至改变了它,但是它改变了其他方向,而不是它应该如何.无论如何,为了知道出了什么问题,我使用netcdf查看器Panoply并正确绘制了地图,如下所示.
是否有netcdf操作符(来自nco或任何python netcdf库)可用于覆盖netcdf文件中的特定单元格?
我想更改包含全球气候数据的netcdf文件中的小区域的值.谢谢!
我有一个工作的python程序,它使用netCDF4模块中的Dataset命令读入大量的netCDF文件.以下是相关部分的片段:
from netCDF4 import Dataset
import glob
infile_root = 'start_of_file_name_'
for infile in sorted(glob.iglob(infile_root + '*')):
ncin = Dataset(infile,'r')
ncin.close()
Run Code Online (Sandbox Code Playgroud)
我想修改它以读取gzip压缩的netCDF文件.文件本身在创建后进行了压缩; 它们不是内部压缩的(即文件是*.nc.gz).如果我正在阅读gzip压缩文本文件,那么命令将是:
from netCDF4 import Dataset
import glob
import gzip
infile_root = 'start_of_file_name_'
for infile in sorted(glob.iglob(infile_root + '*.gz')):
f = gzip.open(infile, 'rb')
file_content = f.read()
f.close()
Run Code Online (Sandbox Code Playgroud)
在谷歌搜索大约半小时并阅读netCDF4文档后,我能够为netCDF文件做到这一点的唯一方法是:
from netCDF4 import Dataset
import glob
import os
infile_root = 'start_of_file_name_'
for infile in sorted(glob.iglob(infile_root + '*.gz')):
os.system('gzip -d ' + infile)
ncin = Dataset(infile[:-3],'r')
ncin.close()
os.system('gzip ' + infile[:-3])
Run Code Online (Sandbox Code Playgroud)
是否可以直接使用数据集命令读取gzip文件?或者没有通过os调用gzip?
有没有办法在Python中为Netcdf文件执行并行IO?
我知道有一个名为PyPNetCDF的项目,但显然它已经老了,没有更新,似乎根本不起作用.有没有人在Python中使用NetCDF并行IO?
任何帮助是极大的赞赏
我有一个旋转坐标的NetCDF文件.我需要将它转换为普通的纬度/经度坐标(长度为-180到180,纬度为-90到90).
library(ncdf4)
nc_open('dat.nf')
Run Code Online (Sandbox Code Playgroud)
对于尺寸,它显示:
[1] " 5 variables (excluding dimension variables):"
[1] " double time_bnds[bnds,time] "
[1] " double lon[rlon,rlat] "
[1] " long_name: longitude"
[1] " units: degrees_east"
[1] " double lat[rlon,rlat] "
[1] " long_name: latitude"
[1] " units: degrees_north"
[1] " char rotated_pole[] "
[1] " grid_mapping_name: rotated_latitude_longitude"
[1] " grid_north_pole_longitude: 83"
[1] " grid_north_pole_latitude: 42.5"
[1] " float tasmax[rlon,rlat,time] "
[1] " long_name: Daily Maximum Near-Surface Air Temperature"
[1] " standard_name: air_temperature"
[1] " units: K" …Run Code Online (Sandbox Code Playgroud) 如何确定我的系统中安装了哪个版本的netcdf库?有命令行吗?我试图搜索"netcdf",我找到了一堆文件,但我无法确定版本号.是否有命令检查安装的任何版本?
我在ubuntu上
我有大量的NetCDF文件,其中包含按月平均的历史天气数据。时间维度单位为“自1600-01-01起的天数”,并使用360天日历。我使用了PCICt软件包来根据360天日历正确格式化时间维度。我的问题是:
尝试将数据写入数据帧或将其保存到输出文件时,收到以下错误消息:as.data.frame.default(x [[i]],optional = TRUE)中的错误:无法强制类“ “ PCICt”“到data.frame
我可以从该PCICt数据中提取年份和月份吗?
任何帮助将非常感激。
#packages used
require("PCICt")
require("RNetCDF")
#dput output assigned to "ex" variable (units "Days since 1600-01-01")
ex <- structure(c(1095, 1125, 1155, 1185, 1215, 1245, 1275, 1305, 1335,
1365, 1395, 1425), .Dim = 12L)
#used PCICt to correctly format date stamp
cal <- "360_day"
origin <- ("1600-01-01")
seconds.per.day <- 86400
origin.pcict <- as.PCICt(origin,cal)
ex_pcict <- origin.pcict + (ex * seconds.per.day)
#result of PCICt code
> print(ex_pcict)
[1] "1603-01-16" "1603-02-16" "1603-03-16" "1603-04-16"
[5] "1603-05-16" …Run Code Online (Sandbox Code Playgroud) 我有一个带有时间序列的netcdf文件,时间变量具有以下典型元数据:
double time(time) ;
time:standard_name = "time" ;
time:bounds = "time_bnds" ;
time:units = "days since 1979-1-1 00:00:00" ;
time:calendar = "standard" ;
time:axis = "T" ;
Run Code Online (Sandbox Code Playgroud)
RI内部想要将时间转换为R日期对象.我通过读取units属性并拆分字符串并使用第三个条目作为我的原点(因此假设间距为"days",时间为00:00等)以硬连线方式实现此目的:
require("ncdf4")
f1<-nc_open("file.nc")
time<-ncvar_get(f1,"time")
tunits<-ncatt_get(f1,"time",attname="units")
tustr<-strsplit(tunits$value, " ")
dates<-as.Date(time,origin=unlist(tustr)[3])
Run Code Online (Sandbox Code Playgroud)
这个硬连线解决方案适用于我的具体示例,但我希望R中可能有一个包很好地处理时间单位的UNIDATA netcdf数据约定并将它们安全地转换为R日期对象?
I'm trying to open multiple netCDF files with xarray in Python. The files have data with same shape and I want to join them, creating a new dimension.
I tried to use concat_dim argument for xarray.open_mfdataset(), but it doesn't work as expected. An example is given below, which open two files with temperature data for 124 times, 241 latitudes and 480 longitudes:
DS = xr.open_mfdataset( 'eraINTERIM_t2m_*.nc', concat_dim='cases' )
da_t2m = DS.t2m
print( da_t2m )
Run Code Online (Sandbox Code Playgroud)
有了这段代码,我希望结果数据数组的形状像(情况:2,时间:124,纬度:241,经度:480)。但是,其形状为(案例:2,时间:248,纬度:241,经度:480)。它创建了一个新维度,但也将最左边的维度相加:两个数据集的“时间”维度。我想知道这是来自“ xarray.open_mfdateset”的错误还是预期的行为,因为两个数据集的“时间”维度都是无限的。
有没有一种方法可以直接使用xarray从这些文件中联接数据并获得上述预期收益?
谢谢。
马泰斯