2012-10-08 86 views
2

我有一个数组表示每小时的温度数据,并且想要计算每日最大值(或最小值或平均值)。我能做到这一点使用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] 

,并从那里我可以使用适用于日常计算方式或最大值,或者别的什么东西。

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

对此提出建议?我尝试使用重塑包中的熔体/投射,但无法理解如何指定所需的公式。

回答

5

如果t2是一个有744个小时时间步长的31天月份的数组,那么它有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'函数,它会给你一个你不需要发明的矢量化方法(这是我的n来自Bioconductor存储库的Biobase包。)

+0

谢谢,这有助于。小时数的变化快于天数,所以我需要:'array(aperm(t2,dim = c(3,1,2)),dim = c(24,31,nrows,ncols))' 。 –