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