「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 = "単位:パーセント")
ファイルを分割して単純集計をおこなえば、クロス集計と同じ結果が出てくる。
colnames(data01) # 項目(変数)名の確認
## [1] "NO" "Q011" "Q012" "Q013" "Q014" "Q015" "Q016" "Q017" "Q018"
## [10] "Q019" "Q021" "Q022" "Q031" "Q032" "Q0401" "Q0402" "Q0403" "Q0404"
## [19] "Q0405" "Q0406" "Q0407" "Q0408" "Q0409" "Q0410" "Q0411" "Q0412" "Q0413"
## [28] "Q0414" "Q0415" "Q0416" "Q0417" "Q0418" "Q0419" "Q0420" "Q0421" "Q0422"
## [37] "Q0423" "Q061" "Q062" "Q063" "Q064" "Q065" "Q066" "Q067" "Q068"
## [46] "Q069" "Q0701" "Q0702" "Q0703" "Q0704" "Q0705" "Q0706" "Q0707" "Q0708"
## [55] "Q0709" "Q0710" "Q0801" "Q0802" "Q0803" "Q0804" "Q0805" "Q0806" "Q0807"
## [64] "Q0808" "Q0809" "Q0810" "Q09" "Q10" "Q11" "Q12" "Q13" "Q14"
## [73] "Q15" "Q16" "Q17" "Q18" "Q19" "Q20" "Q21" "Q22" "Q23"
## [82] "Q24" "Q24S" "Q25" "F1" "F2" "F3" "F4" "F5" "F6"
data01$F1 # 性別の項目のデータを確認。1が男、2が女。
## [1] 2 1 1 1 2 2 1 2 2 2 2 1 2 1 2 2 1 2 1 2 2 1 2 1 2 1 2 2 2 2 2 1 2 1 1 2 1
## [38] 1 2 1 1 2 2 2 1 2 1 2 2 1 2 1 2 1 1 2 2 2 1 1 2 1 1 2 2 1 1 2 2 1 2 1 2 2
## [75] 2 1 1 1 2 1 2 2 2 1 2 2 2 1 1 2 1 2 1 1 1 2 2 2 1 2 2 1 1 1 2 1 2 2 2 2 1
## [112] 2 2 2 2 1 2 1 2 2 2 2 1 2 1 2 2 1 2 2 2 2 1 1 1 2 1 1 2 2 2 2 1 2 1 2 2 2
## [149] 1 1 2 2 2 1 2 2 2 1 2 2 2 2 2 1 2 2 2 1 2 1 1 2 1 1 2 1 2 1 2 1 1 1 2 1 1
## [186] 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2 1 1 1 2 2 2 1 2 2 2 2 1 2 2 2 2 1 2 1 2 2 2
## [223] 1 2 2 1 2 1 1 2
table(data01$F1) # 性別の単純集計。
##
## 1 2
## 94 136
data01m <- data01[data01[,85] == 1,] # 男のデータのみを取りだし、data01mとする。
nrow(data01m)
## [1] 94
data01f <- data01[data01[,85] == 2,] # 女のデータのみを取りだし、data01fとする。
nrow(data01f)
## [1] 136
data01を分割してdata01m、data01fとした。
data01_ <- data01m # 右側を置き換えた。
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 | |
---|---|
自転車 | 11 |
バイク | 5 |
自家用車 | 83 |
バス | 14 |
JR | 9 |
平成筑豊鉄道 | 7 |
タクシー | 8 |
その他 | 0 |
Q1m <- Q1 # 後で使うために別名で保存。
a <- 3 # 開始列番号
b <- 10 # 終了列番号
knitr::kable(head(data01_[,a:b])) # 取り出したデータの確認
自転車 | バイク | 自家用車 | バス | JR | 平成筑豊鉄道 | タクシー | その他 | |
---|---|---|---|---|---|---|---|---|
2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
4 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
7 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
12 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
14 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
s <- table(rowSums(data01_[,a:b])) # 各回答者の選択数
s
##
## 1 2 3 4 6
## 66 17 9 1 1
t <- sum(s)
# 以下は実行しない。無選択者なし。
# cat("選択数の分布","(最初が無選択者数)",s,"\n")
# t <- sum(s) - s[1] # 無選択者数を選択者総数から引く
cat("回答者数=",as.integer(t))
## 回答者数= 94
tm <- t # 後で使うために別名で保存。
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 = "単位:パーセント")
data01_ <- data01f # 右側を置き換えた。
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 | |
---|---|
自転車 | 11 |
バイク | 5 |
自家用車 | 103 |
バス | 27 |
JR | 9 |
平成筑豊鉄道 | 10 |
タクシー | 14 |
その他 | 1 |
Q1f <- Q1 # 後で使うために別名で保存。
a <- 3 # 開始列番号
b <- 10 # 終了列番号
knitr::kable(head(data01_[,a:b])) # 取り出したデータの確認
自転車 | バイク | 自家用車 | バス | JR | 平成筑豊鉄道 | タクシー | その他 | |
---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
5 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
6 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
8 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
9 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
10 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
s <- table(rowSums(data01_[,a:b])) # 各回答者の選択数
cat("選択数の分布","(最初が無選択者数)",s,"\n") # 選択(者)数の分布
## 選択数の分布 (最初が無選択者数) 2 108 15 4 5 2
t <- sum(s) - s[1] # 無選択者数を選択者総数から引く
cat("回答者数=",as.integer(t))
## 回答者数= 134
tf <- t # 後で使うために別名で保存。
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 = "単位:パーセント")
用意しておいたQ1m、tm、Q1f、tfを使ってグラフを作成する。
par(family="HiraKakuProN-W3",mfrow=c(1,2),plt=c(0.3,1,0.3,0.8))
barplot(Q1m/tm*100,col=topo.colors(8),horiz = F,las=2,ylim = c(0,100),ylab = "単位:パーセント",main = "男")
barplot(Q1f/tf*100,col=topo.colors(8),horiz = F,las=2,ylim = c(0,100),ylab = "単位:パーセント",main = "女")