Kengo Nagashima



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": 集計する)。

履歴