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を使用して、毎日の平均や最大値などを計算できます。

結果をデータフレームではなく配列にしたい。

提案?リシェイプパッケージのメルト/キャストを使用してみましたが、目的の式を指定する方法がわかりませんでした。

4

1 に答える 1

9

t2 が 1 か月 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 に答える