我有一个表示每小时温度数据的数组,并想计算每日的最大值(或最小值或平均值)。我可以使用for循环来做到这一点,但是我确信必须有很多更好的方法可以在R中做到这一点。

require(ncdf4)
nc <- nc_open('file.nc')
t2 <- ncvar_get(nc,var='T2')  # [ncols, nrows, nsteps]


现在,t2是一个具有744个小时时间步长的数组,连续31天。我想要的是:

t2.max[ncols, nrows, 31]


或者,更广泛地说,我想将t2调整为:

t2.reshape[ncols, nrows, ndays, 24]


从那里我可以使用apply计算每日均值或最大值或其他值。

我希望结果是数组,而不是数据框。

有什么建议吗?我尝试使用重塑包中的熔体/浇铸法,但无法理解如何指定所需的公式。

最佳答案

如果t2是一个在31天的月份中具有744小时的时间步长的数组,则它具有744行和其他维度?(您没有告诉我们ncol是744还是nrow是744。我们假设它是nrow)。

 array( tc, , dim =c( 31, 24, nrows,  ncols) )


另一方面,如果它是[nrow,ncols,744],则可以使用aperm重铸它,其行如上所述:

 array( aperm(tc, c(3,1,2)) , dim =c( 31, 24, nrows,  ncols) )


有一个具有“ rowMax”和“ rowMin”功能的软件包,可以为您提供无需发明的矢量化方法。 (它位于Bioconductor存储库中的Biobase软件包中。)

08-16 07:11