3

私は、100年以上にわたって1時間に1回、1日24時間、温度を読み取るデータセットを使用しています。データセットのサイズを小さくするために、毎日の平均気温を取得したいと思います。見出しは次のようになります。

     YR MO DA HR MN TEMP
  1943  6 19 10  0   73
  1943  6 19 11  0   72
  1943  6 19 12  0   76
  1943  6 19 13  0   78
  1943  6 19 14  0   81
  1943  6 19 15  0   85
  1943  6 19 16  0   85
  1943  6 19 17  0   86
  1943  6 19 18  0   86
  1943  6 19 19  0   87

600,000以上のデータポイントなど。

YR、MO、DA、TEMPを保持するために、ネストされた関数を実行して1日の平均気温を計算するにはどうすればよいですか?これができたら、長期平均を見て、30年間の1月の平均気温を計算できるようにしたいと思います。どうすればよいですか?

4

3 に答える 3

10

1つのステップで、これを行うことができます。

 meanTbl <- with(datfrm, tapply(TEMP, ISOdate(YR, MO, DA), mean) )

これにより、日時形式のインデックスと値が得られます。末尾の時間を使わずに日付だけを文字として使用したい場合:

meanTbl <- with(dat, tapply(TEMP, as.Date(ISOdate(YR, MO, DA)), mean) )

月間平均は次の方法で実行できます。

 monMeans <- with(meanTbl, tapply(TEMP, MO, mean))
于 2013-02-27T06:44:58.783 に答える
6

あなたはそれを行うことができますaggregate

# daily means
aggregate(TEMP ~ YR + MO + DA, FUN=mean, data=data) 

# monthly means 
aggregate(TEMP ~ YR + MO, FUN=mean, data=data)

# yearly means
aggregate(TEMP ~ YR, FUN=mean, data=data)

# monthly means independent of year
aggregate(TEMP ~ MO, FUN=mean, data=data)
于 2013-02-27T06:54:45.260 に答える
2

最初の質問は、plyrパッケージを使用して達成できます。

library(plyr)
daily_mean = ddply(df, .(YR, MO, DA), summarise, mean_temp = mean(TEMP))

上記のソリューションと同様に、月次の手段を取得するには、次のようにします。

monthly_mean = ddply(df, .(YR, MO), summarise, mean_temp = mean(temp))

または、データセット全体(30年、別名気候の法線)の月平均を取得するには、年ごとではありません。

monthly_mean_normals = ddply(df, .(MO), summarise, mean_temp = mean(temp))
于 2013-02-27T06:45:05.507 に答える