多维数组重塑

5

我有一个数组,表示每小时的温度数据,并想计算每天的最高值(或最低值,或平均值)。我可以使用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"函数来计算每日平均值或最大值等等。

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

有什么建议吗?我尝试使用reshap包中的melt / cast函数,但无法理解如何指定所需的公式。

1个回答

11
如果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软件包中)


谢谢,这很有帮助。小时数变化比天数快,所以我需要使用 array( aperm(t2,dim=c(3,1,2)), dim=c( 24, 31, nrows, ncols) ) - Chris Nolte

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