More Related Content
Similar to 「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」 (20)
More from Nagi Teramo (20)
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
- 14. 何はともあれ可視化しておく
14
Ozone50
100
150
0 50 100 150
Cor : 0.348
5: 0.243
6: 0.718
7: 0.429
8: 0.53
9: 0.18
Cor : -0.612
5: -0.451
6: 0.357
7: -0.667
8: -0.74
9: -0.61
Cor : 0.699
5: 0.613
6: 0.668
7: 0.723
8: 0.605
9: 0.828
Solar.R100
200
300
0 100 200 300
Cor : -0.127
5: -0.217
6: 0.612
7: -0.234
8: -0.188
9: -0.0939
Cor : 0.294
5: 0.482
6: 0.647
7: 0.331
8: 0.457
9: 0.123
Wind10
15
20
5 10 15 20
Cor : -0.497
5: -0.299
6: -0.0877
7: -0.469
8: -0.476
9: -0.579
Temp70
80
90
60 70 80 90
Month
5
6
7
8
9
GGallyパッケージを用い筆者作成(「美しい ペアプロット クオンツ」あたりで検索)
- 17. 従来のRの関数との対応
入力/出力 array
data.
frame
list なし
array apply adply alply a_ply
data.
frame
daply aggregate by d_ply
list sapply ldply lapply l_ply
繰り返し
(repeat)
replicate rdply replicate r_ply
関数引数
(matrix)
mapply mdply mapply m_ply
17http://www.slideshare.net/hadley/04-wrapupより
- 21. ddply関数でやってみる
> #名前を短くしておく
> aq <- airquality
> #月ごとの平均気温を出す
> ddply(aq,"Month“,summarize,
AveTemp=mean(Temp))
Month AveTemp
1 5 65.54839
2 6 79.10000
………………………
21
- 22. 忘れちゃいけないplyrの思想
> #名前を短くしておく
> aq <- airquality
> #月ごとの平均気温を出す
> ddply(aq,"Month“,summarize,
AveTemp=mean(Temp))
Month AveTemp
1 5 65.54839
2 6 79.10000
………………………
22
•Split(分割)
•月(Month)毎に
•Apply(適用)
•気温(Temp)の平均を算出し
•Combine(結合)
•data.frameとして戻す
- 23. 月ごとの平均気温を出す2
> #月ごとの平均気温2 with “.()”関数
> ddply(aq, .(Month), summarize,
AveTemp=mean(Temp))
Month AveTemp
1 5 65.54839
2 6 79.10000
3 7 83.90323
4 8 83.96774
5 9 76.90000
23
- 25. 複数の結果も算出可能
> #複数の結果でもOK
> ddply(aq, .(Month), summarize,
AveTemp=mean(Temp), SdTemp=sd(Temp))
Month AveTemp SdTemp
1 5 65.54839 6.854870
2 6 79.10000 6.598589
3 7 83.90323 4.315513
4 8 83.96774 6.585256
5 9 76.90000 8.355671
25
- 29. プログレスバーも導入可能
> ddply(aq, .(Month), summarize,
AveTemp=mean(Temp), .progress="text")
|===============================| 100%
Month AveTemp
1 5 65.54839
2 6 79.10000
3 7 83.90323
4 8 83.96774
5 9 76.90000
29
- 36. ddply + colwise = 強力
> #月毎の各列の欠損値の個数
> ddply(aq,.(Month),colwise(nmissing))
Month Ozone Solar.R Wind Temp Day HighTemp
1 5 5 4 0 0 0 0
2 6 21 0 0 0 0 0
3 7 5 0 0 0 0 0
4 8 5 3 0 0 0 0
5 9 1 0 0 0 0 0
36
- 45. arrange:ソート
> arrange(aq,Ozone)
Ozone Solar.R Wind Temp Month Day HighTemp
1 1 8 9.7 59 5 21 0
2 4 25 9.7 61 5 23 0
3 6 78 18.4 57 5 18 0
4 7 NA 6.9 74 5 11 1
5 7 48 14.3 80 7 15 0
> #普通にRで書くならこんなかんじ
> aq[with(aq,order(Ozone)),]
45
- 51. name_rows:行名保存&復元
> arrange(name_rows(aq), Ozone)
Ozone Solar.R Wind Temp Month Day .rownames
1 1 8 9.7 59 5 21 21
2 4 25 9.7 61 5 23 23
3 6 78 18.4 57 5 18 18
> # 二回name_rowsを噛ませると行名保存されて出力
> name_rows(arrange(name_rows(aq),Ozone))
Ozone Solar.R Wind Temp Month Day
21 1 8 9.7 59 5 21
23 4 25 9.7 61 5 23
18 6 78 18.4 57 5 18
51
- 55. mapvalues,revalue:値の置換
> x <- c("a", "b", "c")
> #a⇒AAA,c⇒CCCと変換。数値もいける
>mapvalues(x,c("a“,"c"),c("AAA","CCC"))
[1] "AAA" "b" "CCC"
> #a⇒AAA,c⇒CCCと変換。文字・ファクター向き
> revalue(x, c("a"="AAA","c"="CCC"))
[1] "AAA" "b" "CCC"
55
- 56. Happy debugging
> #デバッグする時に便利な書き方
> ddply(aq,.(Month),function(x)browser())
Called from: .fun(piece, ...)
Browse[1]> x
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
56