R でカテゴリデータを集計して、割合を計算する方法。
R で割合を計算する方法 カテゴリデータの集計の方法
もっとも使うのがtable()。
表(table)形式で集計する関数だ。
例としてMASSパッケージのbirthwtデータフレームを使う。
lowは低体重出生(1)か、そうではないか(0)。
htは高血圧の既往あり(1)か、なし(0)かである。
それぞれの人数がわかる。
library(MASS)
table(birthwt$low)
table(birthwt$ht)
> table(birthwt$low)
0 1
130 59
> table(birthwt$ht)
0 1
177 12
R で割合を計算する方法 カテゴリデータ集計の割合
カテゴリごとの割合を算出する。
割合はproportionだから、最初の4文字を取って、propだ。
prop.table()の中にtable()を入れる。
prop.table(table()) となる。
prop.table(table(birthwt$low))
> prop.table(table(birthwt$low))
0 1
0.6878307 0.3121693
100倍すれば、パーセンテージになる。
prop.table(table(birthwt$low))*100
> prop.table(table(birthwt$low))*100
0 1
68.78307 31.21693
round()で小数点以下を丸めることもできる。
round(prop.table(table(birthwt$low))*100,1)
> round(prop.table(table(birthwt$low))*100,1)
0 1
68.8 31.2
R で割合を計算する方法 クロス集計
2つのカテゴリを掛け合わせて集計することをクロス集計と言う。
男女と好き嫌いとを掛け合わせるという感じだ。
掛け合わせる(クロスさせる)変数同士をカンマで並べて書くだけ。
table(factor1, factor2) というふうに書く。
birthwtデータフレームの高血圧htと低体重出生lowとをクロス集計すると、母親が高血圧で、児の出生体重が低体重だったケースが、7ケースあったことが分かる。
table(birthwt$ht, birthwt$low)
> table(birthwt$ht, birthwt$low)
0 1
0 125 52
1 5 7
R で割合を計算する方法 クロス集計の割合を表示させる方法
行の割合と列の割合と全体の割合の3種類が出せる。
場合によって使い分ける。
行(横方向が100%の場合)の割合は、1。
prop.table(table(row variable, col variable),1)
列(縦方向が100%の場合)の割合は、2。
prop.table(table(row variable, col variable),2)
書かないと全体に対する割合が出力される。
prop.table(table(row variable, col variable))
というふうに書く。
行の割合
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1)
0 1
0 70.6 29.4
1 41.7 58.3
列の割合
round(prop.table(table(birthwt$ht, birthwt$low),2)*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low),2)*100,1)
0 1
0 96.2 88.1
1 3.8 11.9
全体の割合
round(prop.table(table(birthwt$ht, birthwt$low))*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low))*100,1)
0 1
0 66.1 27.5
1 2.6 3.7
R で割合を計算する方法 割合の丸め
小数点以下を丸めるのに、round()という関数を使う。
基本は四捨五入する関数で、0.5はバランスよく丸める。
詳しくはこちら。
round() の中で、小数点以下の桁数を指定できる。
round(,1) とすると、小数点以下一桁で丸められる。
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1)
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,1)
0 1
0 70.6 29.4
1 41.7 58.3
round(,2)は小数点以下2桁、round(,3)は小数点以下3桁。
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,2)
round(prop.table(table(birthwt$ht, birthwt$low),1)*100,3)
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,2)
0 1
0 70.62 29.38
1 41.67 58.33
> round(prop.table(table(birthwt$ht, birthwt$low),1)*100,3)
0 1
0 70.621 29.379
1 41.667 58.333
まとめ
カテゴリ集計は、
例数の集計だけなら、table()
割合が見たければ、prop.table(table())
クロス集計は、table(factor1, factor2)
クロス集計の割合は、prop.table(table(factor1, factor2),?)
?の部分は、行の割合なら1、列の割合なら2、全体の割合なら何もなし。
割合をパーセンテージにしたい場合は100をかける。
小数点以下を丸める関数は、round()
小数点以下の桁数を指定するなら、round(,?)の?に数字を入れる。1なら一桁、2なら二桁になる。
コメント