当前位置: 首页 > 知识库问答 >
问题:

当 lat 和 lon 在 R 中是双倍时,从 NetCDF 文件中提取“tos”数据

曹驰
2023-03-14

这是我第一次使用堆栈溢出,我的编码技术非常糟糕,我正在使用一个历史tos的NetCDF文件。我想提取特定lat和lon的tos数据。我有一个三维数组中的tos数据,lon和lat分别在一个二维矩阵中。问题是,我选择的lon和lat的行列组合与tos数组的行-列组合不一致。下面是我目前掌握的代码

# Open a NetCDF file
library('ncdf4')
library('raster') 
library('rgdal') 
library('ggplot2')
hist_acc <- "tos_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_185001-201412.nc"
hist_acc1 <- nc_open(hist_acc)
# Get Latitude, Longitude and time from the Netcdf File
lon_1 <- ncvar_get(hist_acc1, "longitude")
lat_1 <- ncvar_get(hist_acc1, "latitude")
tt <- ncvar_get(hist_acc1, "time")
#Extract Temperature of the surface data and substitue fillvalue with NA and close the NetCDF file to leave more space
tos_array <- ncvar_get(hist_acc1, "tos")
fillvalue<- ncatt_get(hist_acc1, "tos", "_FillValue")
tos_array[tos_array == fillvalue$value] <- NA
nc_close(hist_acc1)
# Extract row and column numbers with specific longitudes
wnf_lon <- which(lon_1 > 7 & lon_1 < 8, arr.ind=TRUE) 
rows_wnf_lon <- wnf_lon[,1] 
col_wnf_lon <- wnf_lon[, 2] 
#Extract row and column numbers with specific latitudes
wnf_lat <- which(lat_1 > 61 & lat_1 < 62, arr.ind=TRUE)
rows_wnf_lat <- wnf_lat[,1] 
col_wnf_lat <- wnf_lat[,2] 
# Extract 1 matrix from array (e g day 1)
day1 <- tos_array[, ,1]

我被困在这里,因为我的纬度和纬度矩阵的行和列数与 tos day1 数组的行和列号不对应。

如果你不明白我的问题,请告诉我,我会尽量说得更具体。如果你在R中有NetCDF文件操作的资源,请提前告诉我,谢谢你

共有1个答案

濮阳默
2023-03-14

访问此类数据的更简单方法是这样的

library(terra)
f <- "tos_Omon_ACCESS-ESM1-5_historical_r1i1p1f1_gn_185001-201412.nc"
r <- rast(f)
r
plot(r, 1)

如果您不熟悉R中的空间(光栅)数据操作,请查看此处

 类似资料:
  • 我对R相对较新。我正在尝试从 netCDF 文件中获取温度数据的不同点(纬度、纬度)的时间序列。我的示例数据文件在这里,这里是小文件。我已经尝试了netCDF包和到目前为止我使用的代码 有人能帮我得到一个时间序列的数据帧(第一列)和另一列中某个特定点(lat,lon)的数据值吗。在这种情况下,我正在寻找一个特定纬度点(并对许多兴趣点重复)和给定变量(在本例中为tasmin)的时间序列(1950-0

  • 我正在处理三维(x,y,time)NetCDF文件,其中包含一年中每小时的PM10浓度估计值。我的目标是提取几个坐标的每小时估计值——所以这将是365天*24小时=8760个估计值/年/坐标——然后平均到每日(365)估计值。 我的脚本(见下文)在2013年运行良好,但2012年的输出有很多NAs。我注意到的区别是2012年的lon/lat文件以矩阵形式存储。。。 对于2013年的文件,lon是“

  • 我在1998-01-01到1998-12-31期间使用TRMM_3B42_Daily产品创建了这个文件。这是我在R中使用的脚本: 通过这个链接,我试图提取值来绘制时间序列,但似乎我正在平均两个单元格的值,而不仅仅是提取单个单元格的值。我该如何解决这个问题?有没有办法创建一个循环,以便它提取不同单元格的值?(在这种情况下,它将是13 x 21=273) 我还发现了另外两个问题,即 excel 文件中

  • 我正在尝试从“tasmax”变量中提取特定的数据子域,从基于纬度和经度的 netcdf 文件中。我的提取标准是:纬度在纬度44到50度之间;以及经度 5 到 -5 度(法国)之间。 我的“lat”变量是105乘102(维度:rlon,rlat,其中rlon和rlat是旋转lat-long的向量),覆盖整个欧洲。 我的'lon'变量也是105 x 102(尺寸:rlon,又是rlat)。lat和lo

  • 一个与R有关的新手问题。如何使用R从netdcf文件中提取特定位置的时间序列数据。例如,下面的快照显示位置(1、2)的时间序列为13、28、43。 提前谢谢。

  • 我已经搜索了很长时间,但仍然无法弄清楚这一点。似乎光栅包是要提取的,但只能从二维数据中提取。 这个四维数据的例子,一个netCDF文件包含连续三天(72小时)的每小时压力水平(4级)气温。https://drive.google.com/file/d/1UIiX9-xHrtH2FT1torg53iPxyzLxSYQu/view?usp=sharing。 我只想提取一些点位置(xy)的温度,以及相应