-2

私は大規模なデータセットを持っています... 63 年分のデータをカバーする 60,000 レコード。

63 年間の 1 日あたりの平均イベント数のプロットを作成する必要があるため、次のようなデータフレームが生成されます。

Date Frequency
DDMM    5.2

最初の質問 - 日付 DD/MM/YYYY を DD/MM に変換してグループ化できるようにするにはどうすればよいですか

2 番目: データ セットの期間にわたってその日の平均値を生成するのに最適な関数は何か。

集計と累積を調べましたが、DDMM と平均値でグループ化できなかったため、惨めに失敗しました。

アップデート:

 esums <- with(TorData,
          tapply(Count, 
                 format( as.Date(Date, "%d/%m/%Y"), "%d/%m"), 
                 sum, na.rm=TRUE) )

Data<-esums/63

結果は次のようになります。

    01/01     01/02     01/03     01/04     01/05     01/06     01/07     01/08 
    0.4444444 0.6190476 2.1428571 1.8095238 4.9365079 5.4920635 4.0000000 1.7301587 
    01/09     01/10     01/11     01/12     02/01     02/02     02/03     02/04 
    1.4444444 1.1904762 0.9206349 0.4126984 0.8412698 0.7936508 2.3015873 4.9206349 
    02/05     02/06     02/07     02/08     02/09     02/10     02/11     02/12 
    4.7936508 6.4920635 3.8888889 2.0317460 1.5714286 0.7936508 0.4603175 1.0634921 

データフレームに変換

    Data<-as.data.frame(Data)

データは配列上にあり、データ フレームに変換する必要がありますか?

       Data
 01/01 0.4444444
 01/02 0.6190476
 01/03 2.1428571
 01/04 1.8095238
 01/05 4.9365079
 01/06 5.4920635
 01/07 4.0000000
 01/08 1.7301587
 01/09 1.4444444
 01/10 1.1904762
 01/11 0.9206349
 01/12 0.4126984

ラインプロットに必要なのは、1 つは日付、もう 1 つは平均の 2 つの列です。日付はデータ型を失ったように見えますか?

4

1 に答える 1

1

このようなことを試してください(再現可能な例がないためテストされていません):

 esums <- with(my_dataframe,
            tapply(event_count, 
                   format( as.Date(my_dates, "%d/%m/%Y"), "%d/%m"), 
                   sum, na.rm=TRUE) )
 enums <-  with(my_dataframe,
            tapply(event_count[!is.na(event_count)], 
                   format( as.Date(my_dates, "%d/%m/%Y"), "%d/%m"), 
                   sum, na.rm=TRUE) )
 mean_by_day_of_year <- esums/enums

作成したデータフレームには係数値があります(年がなければ実際には日付ではなく、年間通算日データ型がなくas.data.frame、d/m を行名に変換するためです)。シーケンス インデックスを使用して線グラフとしてプロットできます。 x 値として xaxt="n" を設定し、 で有益なラベルをプロットしaxis(1, ...)ます。

   dat <- read.table(text=    "Data
 01/01 0.4444444
  01/02 0.6190476
  01/03 2.1428571
  01/04 1.8095238
  01/05 4.9365079
  01/06 5.4920635
  01/07 4.0000000
  01/08 1.7301587
  01/09 1.4444444
  01/10 1.1904762
  01/11 0.9206349
  01/12 0.4126984", header=TRUE)
 plot(dat$Data, xaxt="n")
 axis(1, at=1:nrow(dat), labels=rownames(dat), las=2)
 png(); plot(dat$Data, xaxt="n")
        axis(1, at=1:nrow(dat), labels=rownames(dat), las=2)
 dev.off()

>

于 2014-07-18T17:04:56.887 に答える