我有一个.nc文件包含全年的每日数据,我试图计算每个月的平均值。
我尝试使用netCDF Operator (NCO)提供的linux命令ncra
,命令行是:
# initial date for month
days_start <- seq(as.Date("2000-01-01"), length = 12, by = "months")
days_end <- seq(as.Date("2000-02-01"), length = 12, by = "months") - 1
# monthly mean
for(m in 1:12){
system(paste0('ncra -O -d time,"', days_start[m], '","', days_end[m], '" ', idir, df$fList[i], ' ', odir_m, 'monthly_', m, '.nc'))
}
结果似乎没有什么问题,因为输出文件的时间戳是每个月的中间日期。然而,当我使用terra::tapp(daily_nc, indices2, fun = mean)
仔细检查我的结果时,似乎ncra
得到了不同的平均值
| NCO::ncra|terra::tapp|
| --------------|--------------|
| 256.7218|256.7506|indices2
是这样生成的:
r <- rast(file.path)
indices <- format(time(r), format = "%m") |> as.double()
1条答案
按热度按时间igetnqfo1#
NCO的行为几乎与上面@Robert Wilson的评论一样。除非另有说明,否则NCO会将磁盘类型转换为双精度,进行算术运算,然后转换回输入/输出类型。如果
terra::tapp
方法以不同的方式处理数据,这可以解释差异。