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 公開