重塑多维数组

时间:2012-10-08 17:29:12

标签: r multidimensional-array reshape

我有一个表示每小时温度数据的数组,并希望计算每日最大值(或最小值,或均值)。我可以使用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包中的melt / cast,但无法理解如何指定所需的公式。

1 个答案:

答案 0 :(得分:8)

如果t2是一个31个月的744小时时间步长的数组“那么它有744行和其他尺寸?(你没有告诉我们ncol是744还是nrow是744.我们会假设它是nrow )

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

另一方面,如果它是[nrow,ncols,744],你可以用精子重新制作它,行如上:

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

有一个包含'rowMax'和'rowMin'函数的包,它可以为您提供一个您不需要发明的矢量化方法。 (它来自Bioconductor存储库的Biobase包。)