在 R 中计算一组具有相同维度的 netcdf 文件中的平均场。

3
假设我们有10个这些文件。这个netcdf数据集有一个名为tmp的变量,它是一个3维数组:[lon][lat][time]。现在如何将这10个文件组合成一个文件,并使变量tmp的值为组合值的平均值。
我以为我可以使用ncra(http://nco.sourceforge.net/nco.html#xmp_ncra),但一直没有成功。

1
在NCO方面,可能是通过以下命令ncea file*.nc ave_file.nc来对一组文件进行平均,而不是在文件内沿着记录维度进行平均。 - Dave X
2个回答

1
你可以使用ncdf包将这10个文件读入R中,并使用abind包中的abind将它们合并成一个大的nlon x nlat x time x nfiles数组,然后使用apply来平均file维度。这一切都假设你有足够的RAM将这10个数据集加载到内存中,即它们不能太大。
另外,我建议看一下CDO,这是一个用于操作NetCDF文件的命令行工具。也许还有其他方法可以从该工具中获取所需内容。这可能是一个更友好的内存选项。

1
CDO解决方案是使用命令ensmean,“ens”表示跨多个文件的集合操作。 因此,平均3个输入文件的基本命令如下:
cdo ensmean file1.nc file2.nc file3.nc   ensemble_mean.nc

很明显,打出一个长长的文件名列表是很无聊的,所以最好使用通配符。如果你有像file01.nc、file02.nc等文件名,你可以使用

cdo ensmean file*.nc ensemble_mean.nc 

请注意,由于这些命令不知道会有多少输入文件,因此您无法使用管道过程将此命令与其他CDO运算符组合。
另一个选择是使用ncea,这是完整的nco集合平均包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接