我的项目有两个数据源。我从一个调查(国土安全部)中获得纬度/经度值,我使用这些纬度/经度值从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文件中的值,以便没有缺失值。我在想减少所有失踪人口会减少电脑的使用量,但我愿意走另一条路。谢谢你的帮忙。
1条答案
按热度按时间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包。代码很简单:
或
其中infile是输入的位置,outfile是没有丢失的文件的位置。
要在一个文件夹中循环访问多个文件,可以用途: