NetCDF 中的最近非缺失值

问题描述 投票:0回答:1

我的项目有两个数据源。我从调查 (DHS) 中获取纬度/经度值,并使用这些纬度/经度值从 ERA-5 Land NetCDF 文件中提取天气数据(空间分辨率:0.1 x 0.1 或 ~9 公里)。调查中的纬度/经度值在 2 公里到 10 公里之间随机移动,导致某些点靠近海洋/海洋/其他水源。由于 ERA-5 土地数据是与土地相关的变量,因此存在靠近水源的缺失值。

我使用以下代码将 NetCDF 文件中的数据提取到最近的纬度/经度点:

library(tidyverse)
library(ncdf4)

nc <- nc_open("./Weather/2019_07_18.nc")

lat <- 14.67543
lon <- -17.4484

ncvar_get(nc, varid = "t2m",
          start= c(which.min(abs(nc$dim$longitude$vals - lon)),
                   which.min(abs(nc$dim$latitude$vals - lat)),
                   1),
                   count = c(1,1,-1))

此特定纬度/经度返回所有 NA,因为 NetCDF 文件中缺少数据(通过查看 Panoply 中的文件进行确认)。

问题:如何修改此代码,以便它从 NetCDF 文件中最近的非缺失纬度/经度提取数据?我有两种方法来解决这个问题:1)从 NetCDF 文件中删除所有缺失值,导致代码提取最近的非缺失值,或者 2)推断 NetCDF 文件中的值,以便不存在缺失值价值观。我认为消除所有缺失会减少计算机的密集程度,但我愿意走另一条路。感谢您的帮助。

r netcdf ncdf4
1个回答
0
投票

又过了几天,我找到了问题的答案。我发布此内容是为了防止其他人遇到同样的问题。

关键是利用CDO(气候数据算子)来替代NetCDF中的缺失。替换缺失的选项有两种:最近邻加权和反距离加权。 CDO 文档的 2.6.15 节讨论了缺失值:https://code.mpimet.mpg.de/projects/cdo/embedded/index.html#x1-3440002.6.15

要在 Windows 上使用 CDO,请使用 Cygwin。您可以在 Cygwin 安装程序上安装 CDO 软件包。代码很简单:

cdo setmisstonn infile outfile

cdo setmisstodis infile outfile

infile 是输入的位置,outfile 是没有缺失的文件的位置。

为了循环浏览文件夹中的多个文件,您可以使用:

for i in $(ls); do cdo setmisstonn ${i} ${i}_nona; done
© www.soinside.com 2019 - 2024. All rights reserved.