table 関数を使ったクロス集計

R の base には、クロス集計を行うための table 関数があります。 本ページでは、table 関数を用いた一般的な作表、割合の計算方法、およびパーセント表示についてまとめたいと思います。

集計

table 関数の基本的な使い方は、関数の引数に集計対象の変数を与えるだけです。 層別変数を z とし、変数 x, y に対するクロス集計を行う場合は、


  set.seed(20120508)
  x <- sample(letters[1:3], 300, replace = T)
  y <- sample(letters[4:5], 300, replace = T)
  z <- sample(letters[6:7], 300, replace = T)

  t1 <- table(z, x, y)
  ftable(t1)
  

を実行します。実行結果は以下の様になります。


  > ftable(t1)
      y  d  e
  z x        
  f a   32 28
    b   22 15
    c   33 14
  g a   29 19
    b   26 24
    c   25 33
  

ftable 関数は出力を整形するための関数です。 例のように、右の二つの変数に対するクロス集計が行われ、残りの変数が層別変数として扱われます。

データフレームに対する集計

解析の際にはデータフレームを集計する方が色々と便利ですので、以下ではデータフレームに対する集計を考えます。 データフレーム中で、層別変数を z とし、変数 x, y に対するクロス集計を行う場合は、


  set.seed(20120508)
  .df <- data.frame(
    x = sample(letters[1:3], 300, replace = T),
    y = sample(letters[4:5], 300, replace = T),
    z = sample(letters[6:7], 300, replace = T)
  )
  t2 <- with(.df, table(z, x, y))
  ftable(t2)
  

を実行します。実行結果は以下の様になります。


  > ftable(t2)
      y  d  e
  z x        
  f a   32 28
    b   22 15
    c   33 14
  g a   29 19
    b   26 24
    c   25 33
  

割合の計算

table 関数では度数を計算します。度数を割合に変換したい場合、prop.table 関数を利用します。


  # 全度数に対する割合 (例: 左上セルの割合が 32 / 300 = 0.107)
  t3 <- with(.df, prop.table(table(z, x, y)))

  # 行割合 (行方向の和が 1、例: 左上セルの割合が 32 / (32 + 28) = 0.533)
  t4 <- with(.df, prop.table(table(z, x, y), margin = c(1, 2)))

  # 列割合 (列方向の和が 1、例: 左上セルの割合が 32 / (32 + 22 + 33) = 0.368)
  t5 <- with(.df, prop.table(table(z, x, y), margin = c(1, 3)))

  ftable(t3)
  ftable(t4)
  ftable(t5)
  

実行結果は以下の様になります。


  > ftable(t3)
      y          d          e
  z x                        
  f a   0.10666667 0.09333333
    b   0.07333333 0.05000000
    c   0.11000000 0.04666667
  g a   0.09666667 0.06333333
    b   0.08666667 0.08000000
    c   0.08333333 0.11000000

  > ftable(t4)
      y         d         e
  z x                      
  f a   0.5333333 0.4666667
    b   0.5945946 0.4054054
    c   0.7021277 0.2978723
  g a   0.6041667 0.3958333
    b   0.5200000 0.4800000
    c   0.4310345 0.5689655

  > ftable(t5)
      y         d         e
  z x                      
  f a   0.3678161 0.4912281
    b   0.2528736 0.2631579
    c   0.3793103 0.2456140
  g a   0.3625000 0.2500000
    b   0.3250000 0.3157895
    c   0.3125000 0.4342105
  

パーセント表示

パーセント表示にする場合、100 をかけます。


  ftable(t3) * 100
  

実行結果は以下の様になります。


  > ftable(t3) * 100
      y         d         e
  z x                      
  f a   10.666667  9.333333
    b    7.333333  5.000000
    c   11.000000  4.666667
  g a    9.666667  6.333333
    b    8.666667  8.000000
    c    8.333333 11.000000
  

その他

table 関数にはいろいろなオプションがありますが、欠測値に対する集計について指定する useNA オプションは知っておいても良いでしょう (useNA = "no": 集計しない、"always": 集計する)。

履歴

  • 2012/05/08 公開