【问题标题】:Daily time steps interpolation between several netcdf layers over time in R or CDO在 R 或 CDO 中随时间推移在几个 netcdf 层之间进行每日时间步长插值
【发布时间】:2021-06-18 14:15:38
【问题描述】:

随着时间的推移,我对只有一个时间层的空间变量(比如说 var_A_1985.nc、var_A_2000.nc 和 var_A_2010.nc)进行了多次观察。通过线性插值这些值是否可以有效地重建从 01/01/1985 到 01/01/2010 的每日值?

我目前探索了两种选择:

  • 气候数据运算符 (CDO):我看到了运算符 inttime 和 intyear,但这些似乎不适用于我的情况。

  • R 作为 RasterBrick 元素操作

类似:

library(raster)
library(ncdf4)
setwd(mypath)

var_A_1985 <- raster("var_A_1985.nc")
var_A_2000 <- raster("var_A_2000.nc")

var_A_brick <- brick(var_A_1985, var_A_2000)
brick_2<- brick(lapply(1:n_days, function(x) raster::raster(matrix(NA, nrow(var_A_1985), ncol(var_A_1985)))) #with n_days representing the number of days between 01/01/1985 and 01/01/2000
extremes<- c(1, n_days)

for (i in 1:2) {
    brick_2[[extremes[i]]]=var_A_brick[[1]]
}
var_A_brick_filled <- approxNA(brick_2, method = 'linear')
#and then write this the new netcdf with daily values 

第二种方法确实有效,但需要很长时间。有没有更有效的方法来做到这一点?

【问题讨论】:

    标签: r netcdf data-management cdo-climate


    【解决方案1】:

    您可以使用 CDO 执行此操作,如下所示:

    cdo -inttime,1985-01-01,12:00:00,1day -mergetime var*.nc outfile
    

    当然要调整开始时间。

    【讨论】:

    • 您好罗伯特,感谢您的回复。不是真的,用这个命令你只输入一个文件(所以只是一个时间点)。你如何定义插值的结束?
    • 罗伯特的方案是将“var”开头的文件用mergetime合并到一个文件中,然后对mergetime命令的输出应用插值,这样就会有多个时间片
    • 感谢阿德里安和罗伯特!只是为了了解我是否正确理解:步骤 1)我创建了两个 var 文件,为它们分配了一个日期(01/01/year1 和 year2);步骤 2)我合并两个文件(cdo -cat);第 3 步)我按照罗伯特的建议运行 cdo -inttime 。这是正确的吗?
    • 在问之前你能不能先试试看?
    • 嗨,罗伯特,没必要生气:我只是想了解它是如何工作的。感谢您的建议:我会对其进行测试并接受您的回答。
    猜你喜欢
    • 2018-08-08
    • 2019-02-19
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 2021-10-29
    • 2020-09-21
    相关资源
    最近更新 更多