从R中的NetCDF文件中提取所有级别

从R中的NetCDF文件中提取所有级别,r,netcdf,levels,R,Netcdf,Levels,我试图从R中的一个特定NetCDF文件中提取所有级别。我可以通过手动将每个级别提取为一行代码,然后将它们组合为一个数据帧来实现这一点。但是当我有很多文件时,这是非常长的。是否可以在一个文件中提取所有43层 我将此和作为指导 本质上,硝酸盐数据来自 在43个不同的深度有浓度。是否可以提取特定位置的所有深度 我可以做一个级别。但每一层都代表一种深度。有可能获得所有级别吗 我也不理解第三条警告消息:In.getCRSfromGridMap4(atts):无法处理CRS的以下部分: epsg_代码=ep

我试图从R中的一个特定NetCDF文件中提取所有级别。我可以通过手动将每个级别提取为一行代码,然后将它们组合为一个数据帧来实现这一点。但是当我有很多文件时,这是非常长的。是否可以在一个文件中提取所有43层

我将此和作为指导

本质上,硝酸盐数据来自
在43个不同的深度有浓度。是否可以提取特定位置的所有深度

我可以做一个级别。但每一层都代表一种深度。有可能获得所有级别吗

我也不理解第三条警告消息:In.getCRSfromGridMap4(atts):无法处理CRS的以下部分: epsg_代码=epsg:4326

我得到了不同的结果(1月1级为0.5),但我的同事1月1级为1.4)。我的错误是由上述警告引起的吗

#this works
Nit_Jan <- brick("~woa18_all_n01_01.nc", stopIfNotEqualSpaced =    
FALSE, varname = "n_an", level = 1)

#this doesn't
Nit_Jan <- brick("~woa18_all_n01_01.nc", stopIfNotEqualSpaced = 
FALSE, varname = "n_an", level = 1:43)

Warning messages:
1: In if (level <= 0) { :
the condition has length > 1 and only the first element will be used 
2: In if (oldlevel != level) { :
the condition has length > 1 and only the first element will be used
3: In .getCRSfromGridMap4(atts) : cannot process these parts of the   
CRS:epsg_code=EPSG:4326
#这很有效

Nit_Jan这里有些混乱,因为文件有“级别”(第四维),但级别数是一个(因此没有第四维)。代码可能会检测到这一点,但现在您必须添加
lvar=4
,以获得所需的对象

library(raster)
f <- "woa18_all_n01_01.nc"
b <- brick(f, var="n_oa", lvar=4)
b
#class      : RasterBrick 
#dimensions : 180, 360, 64800, 43  (nrow, ncol, ncell, nlayers)
#resolution : 1, 1  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source     : woa18_all_n01_01.nc 
#names      : X0, X5, X10, X15, X20, X25, X30, X35, X40, X45, X50, X55, X60, X65, X70, ... 
#meters     : 0, 800 (min, max)
#varname    : n_oa 
#level      : 1 
库(光栅)

f这里有一些混乱,因为文件有“级别”(第四维),但级别数是一个(因此没有第四维)。代码可能会检测到这一点,但现在您必须添加
lvar=4
,以获得所需的对象

library(raster)
f <- "woa18_all_n01_01.nc"
b <- brick(f, var="n_oa", lvar=4)
b
#class      : RasterBrick 
#dimensions : 180, 360, 64800, 43  (nrow, ncol, ncell, nlayers)
#resolution : 1, 1  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source     : woa18_all_n01_01.nc 
#names      : X0, X5, X10, X15, X20, X25, X30, X35, X40, X45, X50, X55, X60, X65, X70, ... 
#meters     : 0, 800 (min, max)
#varname    : n_oa 
#level      : 1 
库(光栅)

我试着按照上面的建议打开它,但对于43个级别,我只得到一个值。数据跨越-180、180、-90、90,我想要一个位置stn1=matrix(c(-150、-30),ncol=2)stn1-extract(e,stn1)Error in(function)(class,fdef,mtable):找不到签名“list”、“matrix”的函数“extract”的继承方法可能是因为数据的结构方式吗?测试我尝试了cbind(-150,-30)但数据仍然不正确。是否因为z值而出现错误?提取值时显示的是X696.5。这与z值相同。最大深度为800(这不应该是z值吗?)。对于所有的混淆,抱歉!该位置位于澳大利亚的陆地上--all
NA
。z值标签“X696.5”不是该值(可能是不正确的,因为它不会改变——我会检查的,非常抱歉!我实际上想要它离开澳大利亚海岸(太平洋)一侧,所以160W,30E(-160,-30)。我猜所有的“网格”都没有数据。我下载了.csv文件,但有很大的差距。我尝试按照上面的建议打开它,但我只得到43个级别的一个值。数据跨度为-180、180、-90、90,我想要一个位置stn1=矩阵(c(-150,-30),ncol=2)(函数(类、fdef、mtable)中的stn1 extract(e、stn1)错误:找不到签名“list”的函数“extract”的继承方法,“矩阵”可能是因为数据的结构方式吗?测试我尝试了cbind(-150,-30),但数据仍然不正确。是否因为z值而存在错误?提取值时表示为X696.5。这与z值相同。最大深度为800(这不是z值吗?)。抱歉,所有的混乱!那个位置是在澳大利亚的陆地上---全部
NA
。z值标签“X696.5”不是该值(并且可能不正确,因为它不会改变---我会检查它,非常抱歉!我实际上想要它离开澳大利亚海岸(太平洋)一侧,所以160W,30E(-160,-30)。我猜所有的“网格”都没有数据。我下载了.csv文件,但有很大的差距。
crs(b) <- "+init=EPSG:4326"
f <- "woa18_all_n01_01.nc"
brick(f, var="n_oa")
#class      : RasterBrick 
#dimensions : 180, 360, 64800, 43  (nrow, ncol, ncell, nlayers)
#resolution : 1, 1  (x, y)
#extent     : -180, 180, -90, 90  (xmin, xmax, ymin, ymax)
#crs        : +init=EPSG:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
#source     : woa18_all_n01_01.nc 
#names      : X0, X5, X10, X15, X20, X25, X30, X35, X40, X45, X50, X55, X60, X65, X70, ... 
#depth (meters): 0, 800 (min, max)
#varname    : n_oa 
#level      : 1