【統計学】分割表(クロス集計)(R)
2変数データの確認の王道、クロス集計。
有斐閣「統計学」2章SECTION5では分割表として紹介されています。
用意するデータ
上記教科書の表2-6を参照します。 性別と禁煙するか否かのデータです。 教科書では喫煙は〇×ですが、ここでは1=喫煙, 0=喫煙しないとします。
data <-data.frame( sex = c('女','男','男','女','男','女','女','男','男','男','女','女','男','女','女','男','女','女','女','女'), smoke = c(1,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,1,0,0,0) ) print(data) # sex smoke #1 女 1 #2 男 0 #3 男 1 #4 女 1 #5 男 0 #6 女 0 #7 女 0 #8 男 0 #9 男 0 #10 男 1 #11 女 0 #12 女 0 #13 男 1 #14 女 1 #15 女 0 #16 男 0 #17 女 1 #18 女 0 #19 女 0 #20 女 0
まずはtable関数
table関数を使えば簡単にクロス表が書けます。
table(data) # smoke #sex 0 1 # 女 8 4 # 男 5 3
各項目の計算(割合にするなど)は以下のサイトが詳しいです。
合計値を加える
各行または列の合計値を加える場合addmargins関数を利用します。
countingency_table <- table(data) addmargins (countingency_table) # smoke #sex 0 1 Sum # 女 8 4 12 # 男 5 3 8 # Sum 13 7 20
見た目をよくする
資料やレポートにそのまま貼り付けられる形にするにはxtableパッケージがあります。
#インストール install.packages("xtable") #パッケージの起動 library(xtable) print(xtable(table(data)),type = "html") #<!-- html table generated in R 3.4.1 by xtable 1.8-2 package --> #<!-- Sun Jun 10 16:10:17 2018 --> #<table border=1> #<tr> <th> </th> <th> 0 </th> <th> 1 </th> </tr> # <tr> <td align="right"> 女 </td> <td align="right"> 8 </td> <td #align="right"> 4 </td> </tr> # <tr> <td align="right"> 男 </td> <td align="right"> 5 </td> #<td align="right"> 3 </td> </tr> # </table>
出力例
0 | 1 | |
---|---|---|
女 | 8 | 4 |
男 | 5 | 3 |
見た目はいいですが、Htmlタグで出力されるので不便ですね。 やはりcsvなどに出力してExcelで修正するほうがいいですね。