R语言 NetCDF中最近的非缺失值

sirbozc5  于 8个月前  发布在  Etcd
关注(0)|答案(1)|浏览(91)

我的项目有两个数据源。我从一个调查(国土安全部)中获得纬度/经度值,我使用这些纬度/经度值从ERA-5 Land NetCDF文件(空间分辨率:0.1 X 0.1,或〜 9 km)。调查中的纬度/经度值在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文件中的值,以便没有缺失值。我在想减少所有失踪人口会减少电脑的使用量,但我愿意走另一条路。谢谢你的帮忙。

dgsult0t

dgsult0t1#

又过了几天我才找到答案。我张贴这一点,以防有其他人在那里运行到同样的问题。
关键是使用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

相关问题