僕が作った単語帳は、単語をグループに分けて登録することができます。Rの処理としては因子型になっているので、tapply関数を使うと集計が色々できて面白いです、という例。
> tapply(tango$num_of_right,tango$group,summary) $toefl.listening.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 0.000 1.000 1.527 2.000 6.000 $toefl.reading.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.00 0.00 0.00 0.17 0.00 2.00 > tapply(tango$complete,tango$group,summary) $toefl.listening.advanced Mode FALSE TRUE logical 125 25 $toefl.reading.advanced Mode FALSE TRUE logical 185 15
ちなみに「これのがめんどうだな」と感じた正常な感性をお持ちのあなたなら、たぶんこうしているんじゃないかなと思います。
> apply(tango[c("num_of_right","complete")],2,function(x){tapply(x,tango$group,summary)}) $num_of_right $num_of_right$toefl.listening.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 0.000 1.000 1.527 2.000 6.000 $num_of_right$toefl.reading.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.00 0.00 0.00 0.17 0.00 2.00 $complete $complete$toefl.listening.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0000 0.0000 0.0000 0.1667 0.0000 1.0000 $complete$toefl.reading.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 0.000 0.000 0.075 0.000 1.000
tango$groupと書くのすら面倒&でもattachはしたくないという人のためにwithを使ってみたけど、これはやりすぎな感がするかな。。。
withはattachの局所版、みたいな感じだよ。withが終わるまでは$なしでアクセスできるようになって、withが終わるとアクセスできなくなる。
> with(tango,{apply(cbind(num_of_right,complete),2,function(x){tapply(x,group,summary)})}) $num_of_right $num_of_right$toefl.listening.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 0.000 1.000 1.527 2.000 6.000 $num_of_right$toefl.reading.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.00 0.00 0.00 0.17 0.00 2.00 $complete $complete$toefl.listening.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0000 0.0000 0.0000 0.1667 0.0000 1.0000 $complete$toefl.reading.advanced Min. 1st Qu. Median Mean 3rd Qu. Max. 0.000 0.000 0.000 0.075 0.000 1.000
やっぱapplyファミリーいいねー。applyファミリーについては以前この辺でまとめたりした。