読者です 読者をやめる 読者になる 読者になる

Rのplyrパッケージをちょっとだけ復習

R

第一志望落ちて正直死にたくなりましたがあまちゃんが可愛くて面白くてもっと見たくて生きています. あまちゃんがこの時期に始まらなければ学部2年の時のように黒歴史に突入でした.


あっ, どーも僕です.


plyrパッケージ 復習

Tokyo.Rの演題に「@teramonagi plyrパッケージで君も前処理スタ☆」がありました.

で, plyrは便利だとは聞きつつもほったらかしにしていましたがこの機会に復習しました.


plyrとは?

plyrパッケージ*1は多次元データを分解して, 操作して, もとに戻す関数の集まりといったところでしょうか. とりあえず事例がないかと探したところRpubsには実例集がありました. 正直これをみれば復習は終わってしまうほど丁寧でした.

....

とはいっても, 載っていた例はデフォルトの関数で十分こなせるものであまり便利な感じしなかったので, 回帰で試してみました.


データフレーム⇒リスト

irisをSpeciesで分解してそれぞれにlmを使うときはこのようになります. この時点ではそんなに便利ではないのかな?

# plyrでやる
library(plyr)
ply_fits  <- dlply(iris, .(Species), lm, formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width)

# デフォルト
def_fits <- by(iris[,-5], iris[,5], lm, formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width) 

リスト⇒データフレーム

上で得た結果のリストから係数をとりだしデータフレームでまとめると次のようになります. 微妙に結果は違うけど, そんな便利な感じしないか...

# 回帰の結果から係数を抜きだす
# plyr
ldply(ply_fits, coefficients)
#     Species (Intercept) Sepal.Width Petal.Length Petal.Width
#1     setosa    2.351890   0.6548350    0.2375602   0.2521257
#2 versicolor    1.895540   0.3868576    0.9083370  -0.6792238
#3  virginica    0.699883   0.3303370    0.9455356  -0.1697527

# デフォルト
do.call(rbind, lapply(def_fits, coefficients))
#          (Intercept) Sepal.Width Petal.Length Petal.Width
#setosa        2.351890   0.6548350    0.2375602   0.2521257
#versicolor    1.895540   0.3868576    0.9083370  -0.6792238
#virginica     0.699883   0.3303370    0.9455356  -0.1697527

まとめ

  • plyrの復習はできた
  • 簡潔な記述だけどそこまで便利な感じしなかった.
  • Tokyo.Rに期待
  • よくみるテーブルはこちら

f:id:aaaazzzz036:20130408195846p:plain

*1:Hadley Wickham (2011). The Split-Apply-Combine Strategy for Data Analysis. Journal of Statistical Software, 40(1), 1-29. URL http://www.jstatsoft.org/v40/i01/.