Rで年度ごとに集計したテーブルデータを作成する

R言語でデータを集計したりする時に、年度単位で集計したかったりしませんか。

意外とそのような方法がなかったので、ここの掲載しておきます。

 

テストデータの作成

まず、テストデータを作成します。今回は、日経平均株価のデータを使います。取得方法は、基本的に以下のページを参考にしています。ほとんどこの記事に書いてある通りにやれば良いと思いますが、僕の環境(Mac)では、ダウンロードしたファイルがそのままだと文字コードエラーになってしまったので、ヘッダーを適当にアルファベットに編集しています。

【R言語】日次データオブジェクトに、曜日列を挿入する – Qiita

一応、ソースコードを掲載しておきますね。

nikkei225 <- read.csv("nikkei_stock_average_daily_jp.csv")

#末尾に空行があるので削除
nikkei225 <- nikkei225[-857, ]

これで、2013年から2016年までの、日次の株価に関するデータを用意できました。

 

年と月で集計する

作成したテストデータから、年と月のマトリックスで集計したデータを作成します。具体的なステップとしては、今の日付のデータから、「年」と「月」をそれぞれ抽出し、それを掛け合わせるようにテーブルデータを作成します。

#年と月のデータを作成
data.year <- format(as.Date(nikkei225$date),"%Y")
data.month <- months(as.Date(nikkei225$date))

#データを結合
nikkei225 <- data.frame(nikkei225, data.year, data.month)

#テーブルで集計
table(nikkei225$data.year, nikkei225$data.month)

 

これでテーブルは、以下の通りになります。各年における東証が開かれた日数がカウントされました。

10月11月12月1月2月3月4月5月6月7月8月9月
2013222020191920212120222219
2014221821191920212021222120
2015211921191922211822222119
2016000192022201922100

 

今回は、これを年度のデータにしたいので、変換します。また、列も10月から始まっていて変な風になっているので、これも修正したいですね。

 

年度の算出

年度ごとに分類するためには、「境目となる月より過ぎていれば1を足す」という処理をしてあげます。

#各年度でデータを仕分ける
fiscalYear <- as.numeric(format(as.POSIXlt(nikkei225$date,format="%Y/%M/%d"),"%Y")) + (format(as.POSIXlt(nikkei225$date,format="%Y/%M/%d"), "%M") >= "04") - 1

#年度データを結合して集計
nikkei225 <- data.frame(nikkei225, fiscalYear)
sum.date <- table(nikkei225$fiscalYear, nikkei225$data.month)

#最後に列の順番を入れ替える
sum.date <- sum.date[,c(7,8,9,10,11,12,1,2,3,4,5,6)]

 

以上で、やっと出来上がりです。これを出力すると、以下のようになります。テストデータは2013年1月からなので、2012年度開始でちゃんと出力されていますね。

4月5月6月7月8月9月10月11月12月1月2月3月
2012000000000191920
2013212120222219222020191920
2014212021222120221821191922
2015211822222119211921192022
2016201922100000000

 

これらの処理は、以下のサイトを参考にさせていただきました。

r – Assigning Dates to Fiscal Year – Stack Overflow

R:データフレームの列を入れ替える・削除する。 – Qiita