いっかくのデータサイエンティストをいく

1からプログラミングとデータサイエンスを独習したい

【統計学】分割表(クロス集計)(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

各項目の計算(割合にするなど)は以下のサイトが詳しいです。

nshi.jp

合計値を加える

各行または列の合計値を加える場合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で修正するほうがいいですね。