データの読み込み

「tgw.RDS」というファイルを読み込み、任意の名のオブジェクトして保存する。 head()とtail()でデータの最初と最後を確認する。

data01 <- readRDS("data/tgw.RDS")
head(data01)
tail(data01)

単純集計の例

単項選択の場合

複数の選択肢の中から1つを回答させる質問形式。table()関数で1つの項目(変数)について集計。

table(data01$Q25)

  0   1   2   3   4   5   6 
  1 120  31   4  28  31  15 

結果を配列として保存し、各選択肢の内容をラベルとして用いる場合は以下の通り。マトリックスではないので、colnames()ではなく、names()を使う。

tbl01 <- table(data01$Q25)
names(tbl01) <- list("無回答","住み続けたい","当分は住んでいたい",
     "市内で転居したい","市外に転出したい","どちらとも言えない","わからない")

for (i in 1:7){cat(names(tbl01)[i],"---",tbl01[i],"\n")}
無回答 --- 1 
住み続けたい --- 120 
当分は住んでいたい --- 31 
市内で転居したい --- 4 
市外に転出したい --- 28 
どちらとも言えない --- 31 
わからない --- 15 

以下のようにすることもできる。knitrパッケージのkable()関数を使う。

knitr::kable(tbl01)
Var1 Freq
無回答 1
住み続けたい 120
当分は住んでいたい 31
市内で転居したい 4
市外に転出したい 28
どちらとも言えない 31
わからない 15

以下、説明省略。

table(data01$F1)

  1   2 
 94 136 
tbl02 <- table(data01$F1)
names(tbl02) <- list("M","F")
for (i in 1:2){cat(names(tbl02)[i],"---",tbl02[i],"\n")}
M --- 94 
F --- 136 
knitr::kable(tbl02)
Var1 Freq
M 94
F 136

複数回答を許す場合

各項目(変数)に個別に0または1をデータでは入力。0は選択なし、1は選択あり。

ひとまとまりの列(変数)の開始列と終了列を確認して以下のようにする。

変数名を書き換えてしまうので、作業用にdata01を作成。

data01_ <- data01
a <- 3 # 開始列
b <- 10 # 終了列

colnames(data01_)[a:b] <-  c("自転車","バイク","自家用車","バス","JR","平成筑豊鉄道","タクシー","その他") 

c <- b-a +1 # 項目数
Q1 <- numeric(c)
Q1 <- colSums(data01_[,a:b])
knitr::kable(Q1)
x
自転車 22
バイク 10
自家用車 186
バス 41
JR 18
平成筑豊鉄道 17
タクシー 22
その他 1

クロス集計の例

「table(A, B)」で、「A by B」のクロス集計。

集計結果をマトリックスに保存する。ここでは、tbl03とした。

table(data01$Q25,data01$F1)
##    
##      1  2
##   0  0  1
##   1 53 67
##   2 16 15
##   3  1  3
##   4 10 18
##   5  9 22
##   6  5 10
tbl03 <- table(data01$Q25,data01$F1)

rownames(tbl03) <-  list("無回答","住み続けたい","当分は住んでいたい",
     "市内てで転居したい","市外に転出したい","どちらとも言えない","わからない")

colnames(tbl03) <- list("男","女")
knitr::kable(tbl03)
無回答 0 1
住み続けたい 53 67
当分は住んでいたい 16 15
市内てで転居したい 1 3
市外に転出したい 10 18
どちらとも言えない 9 22
わからない 5 10

以下は、一方の変数が複数回答を許す場合。

a <- 3 # 開始列
b <- 10 # 終了列
c <- b-a +1 # 項目数
d <- 2 # 第2変数の選択肢数
e <- c*d 
f <- 85 # 第2変数の列番号
m1 <- matrix(1:e,nrow=c)

rownames(m1) <- c("自転車","バイク","自家用車","バス","JR","平成筑豊鉄道","タクシー","その他")
colnames(m1) <- c("男","女")

for(i in 1:c){(m1[i,] <- table(data01[,i+ a -1],data01[,f])[2,1:d])} # 2行目の数値を取り出す
knitr::kable(m1)
自転車 11 11
バイク 5 5
自家用車 83 103
バス 14 27
JR 9 9
平成筑豊鉄道 7 10
タクシー 8 14
その他 0 1

棒グラフ

人数の棒グラフを作成。複数回答を許す質問群に対する回答を一括して表示したもの。

par(family="HiraKakuProN-W3",plt=c(0.2,1,0.3,0.8))
barplot(Q1,col=topo.colors(8),horiz = F,las=2,ylim = c(0,200)) 

複数回答の処理について

1つも選択していない人の数を調べて、パーセントを計算するときに外す。

a <- 3  # 開始列番号
b <- 10 # 終了列番号
knitr::kable(head(data01_[,a:b])) # 取り出したデータの確認
自転車 バイク 自家用車 バス JR 平成筑豊鉄道 タクシー その他
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 1 0 0 1 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
s <- table(rowSums(data01_[,a:b])) # 各回答者の選択数
cat("選択数の分布","(最初が無選択者数)",s,"\n") # 選択(者)数の分布
## 選択数の分布 (最初が無選択者数) 2 174 32 13 6 2 1
t <- sum(s) - s[1] # 無選択者数を選択者総数から引く
cat("回答者数=",as.integer(t))
## 回答者数= 228

棒グラフ

par(family="HiraKakuProN-W3",plt=c(0.2,1,0.3,0.8))
barplot(Q1/t*100,col=topo.colors(8),horiz = F,las=2,ylim = c(0,100),ylab = "単位:パーセント")