5

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

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

现在 t2 是一个数组,包含 31 天月份的 744 小时时间步长。我想要的是:

t2.max[ncols, nrows, 31]

或者,更一般地说,我想将 t2 重塑为:

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

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

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

建议?我尝试使用 reshape 包中的熔化/铸造,但不明白如何指定所需的公式。

4

1 回答 1

9

如果 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 包中。)

于 2012-10-08T17:45:30.913 回答