以下のような入力例をNumbersで作成し、CSVファイルとして保存した。

CSVファイルの読み込み

library(readr)
ex01 <- read_csv("data/ex01.csv",show_col_types = FALSE)
## New names:
## • `` -> `...1`
## • `` -> `...6`
## • `` -> `...7`
ex01
ex01 <- as.data.frame(ex01)
ex01 <- ex01[,1:5]
colnames(ex01)[1] <- "ID" 
ex01

R専用のデータファイルにしておく場合。次のスクリプトを1回実行する。

saveRDS(ex01,file = "data/ex01.RDS")

次からは以下のスクリプトでデータを読み込み、任意の名前を付けて使用する。

RDSファイルの読み込み

data <- readRDS("data/ex01.RDS")

単純集計とクロス集計

# 単純集計とクロス集計
table(data$Q03_1)
## 
## 1 2 3 
## 3 5 4
table(data$Q03_2)
## 
## 1 2 3 
## 2 5 5
table(data$Q03_1,data$Q03_2) # Q03_1 by Q03_2
##    
##     1 2 3
##   1 1 2 0
##   2 1 2 2
##   3 0 1 3
# クロス表の作成
t01 <- table(data$Q03_1,data$Q03_2)
addmargins(t01) # 周辺度数を計算してみる。
##      
##        1  2  3 Sum
##   1    1  2  0   3
##   2    1  2  2   5
##   3    0  1  3   4
##   Sum  2  5  5  12
# 行がQ03_1、列がQ03_2であることを確認。
rownames(t01) <- list("A1","A2","A3")
colnames(t01) <- list("B1","B2","B3")
prop.table(t01,2) # 2は列方向を指定する
##     
##       B1  B2  B3
##   A1 0.5 0.4 0.0
##   A2 0.5 0.4 0.4
##   A3 0.0 0.2 0.6
round(prop.table(t01,2)*100) # 列パーセントの計算
##     
##      B1 B2 B3
##   A1 50 40  0
##   A2 50 40 40
##   A3  0 20 60
round(prop.table(t01,1)*100) # 行パーセントの計算 
##     
##      B1 B2 B3
##   A1 33 67  0
##   A2 20 40 40
##   A3  0 25 75
t(t01) # 行列を転置(transpose)
##     
##      A1 A2 A3
##   B1  1  1  0
##   B2  2  2  1
##   B3  0  2  3
round(prop.table(t(t01),1)*100) # 転置した行列の行パーセント
##     
##      A1 A2 A3
##   B1 50 50  0
##   B2 40 40 20
##   B3  0 40 60

モザイク図

par(pty="s")
mosaicplot(t01)

mosaicplot(t(t01))

mosaicplot(t01,dir = c("h","v"))