
「平成17年社会調査実習報告書」の思い出
「田川市民の地域生活における満足度」というタイトルの社会調査実習報告書が、2006年3月に発行されている。

その報告書の中の以下のような表は、SPSS Tablesというソフトウェアを利用したのだと思う。調査報告書の最後に掲載するために統計表をまとめて作成するような場合には便利なソフトウェアであった。今は、それは持っていない。SASもJMPも使える環境にない。
細かいことは忘れてしまったが、Tablesではそのような場合に以下のようなスクリプトを使ったはずである。

「複数回答を許す」場合の合計の所が「回答者数」となっている表があるが、こういう計算は、SPSS Tablesを使わないでRスクリプトでやるとしたらちょっとした工夫が必要だと思う。



パソコンのハードディスクの中を探してみたら、データファイルが見つかった。どうやら、当時使ったものと同じデータのようだ。RStudioで読み込んで確認してみた。18年近く前なのだが、digitalなものはそのまま変わることなく残っているということを確認することができた。

以下で、Rではどうしたらいいかを確認してみた。
# データの読み込み
data01 <- readRDS("data/tgw.RDS")
# 単純集計の例
data01_ <- data01
colnames(data01_)[3:10] <- c("自転車","バイク","自家用車","バス","JR",
"平成筑豊鉄道","タクシー","その他")
Q1 <- numeric(8)
Q1 <- colSums(data01_[,3:10])
knitr::kable(Q1)

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つ以上の手段を選択した人)を計算するために次のようにすると228である。パーセントを計算する場合にはこれを使う。
a <- 3 # 開始列番号
b <- 10 # 終了列番号
knitr::kable(head(data01_[,a:b])) # 取り出したデータの確認
s <- table(rowSums(data01_[,a:b])) # 各回答者の選択数
cat("選択数の分布","(最初が無選択者数)",s,"\n") # 選択(者)数の分布
t <- sum(s) - s[1] # 無選択者数を選択者総数から引く
cat("回答者数=",as.integer(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 = "単位:パーセント")

# クロス集計の例
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)

単項選択の場合。
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
tbl03 <- table(data01$Q25,data01$F1)
rownames(tbl03) <- list("無回答","住み続けたい","当分は住んでいたい",
"市内てで転居したい","市外に転出したい","どちらとも言えない","わからない")
colnames(tbl03) <- list("男","女")
knitr::kable(tbl03)

RPubs.comでRスクリプト等を公開。
以下を参照した。
Rによる調査データの整理 (2012年5月2日最終更新)
当時の状況がわかるブログ記事。