将每小时的ERA5 netcdf文件合并为每日文件与R

wpcxdonn  于 2023-06-19  发布在  Etcd
关注(0)|答案(2)|浏览(275)

我有NetCDF格式的1970 - 2022年所有月份的最高温度每小时数据(每个月的NetCDF包含1970 - 2022年的24小时数据)。有人可以帮助我用R将每小时的数据聚合成每日的数据吗?我已经尝试过直接将每小时的数据转换为每天并下载它,但它无法下载如此大的数据集。(这是我试过的代码)。

wf_set_key(service = "cds") 
data=c.retrieve(
'reanalysis-era5-single-levels',
{
'product_type': 'reanalysis',
'variable': 'maximum_2m_temperature_since_previous_post_processing',
'year': [
  '1970', '1971', '1972',
  '1973', '1974', '1975',
  '1976', '1977', '1978',
  '1979', '1980', 
],
'month': [
  '03','04',
  '05', '06',
],
'day': [
  '01', '02', '03',
  '04', '05', '06',
  '07', '08', '09',
  '10', '11', '12',
  '13', '14', '15',
  '16', '17', '18',
  '19', '20', '21',
  '22', '23', '24',
  '25', '26', '27',
  '28', '29', '30','31',
],
'time': [
  '00:00', '01:00', '02:00',
  '03:00', '04:00', '05:00',
  '06:00', '07:00', '08:00',
  '09:00', '10:00', '11:00',
  '12:00', '13:00', '14:00',
  '15:00', '16:00', '17:00',
  '18:00', '19:00', '20:00',
  '21:00', '22:00', '23:00',
],
'area': [
  38, 67, 6,
  99
],
'format': 'netcdf',
 },
 'day_mean'=ct.climate.daily_mean(data,keep_attrs=True)
 if count == 1:
 day_mean_all=day_mean
 else:       
  day_mean_all=ct.cube.concat([day_mean_all, day_mean], dim='time')
  count = count + 1
   return day_mean_all
   'download.nc')

我试图将每小时的数据汇总到当月的每日数据。

library(ncdf4) 
ncpath <- "D:/MAX_TEMP/" 
ncname <- "adaptor.mars.internal-1681202164.1038315-25242-15-2a718a58-dcd5-4470-9fd2-ddbdede30875_march"   
ncfname <- paste(ncpath, ncname, ".nc", sep="") 
ncin <- nc_open(ncfname) 
print(ncin) 
library(dplyr) 
a1<-ncname %>%
  group_by(time) %>%
    summarize(Mean_Max_Temp = mean(expver))
#Error in UseMethod("group_by")
1wnzp6jl

1wnzp6jl1#

请参阅Robert Hijmans here给出的精彩解释
我想你应该熟悉raterbick函数来读取netcdf文件(也可以使用包terra,但现在坚持使用raterbick)。然后,您将需要在other中按day-mon对图层进行分组,以便在时间维度上进行聚合,该维度在netcdf中是每小时一次。
最后,使用上面链接所示的stackApply()函数。希望这有帮助!

s3fp2yjn

s3fp2yjn2#

你可以使用terra::tapp来实现。

library(terra)
r <- rast("adaptor.mars.internal-1681202164.1038315-25242-15-2a718a58-dcd5-4470-9fd2-ddbdede30875_march.nc")
x <- tapp(r, "days", mean)

相关问题