1 Packageをload

library(tidyverse) # データ前処理の基本ツール
library(readxl) # Excelデータを読み込む
library(vcdExtra) # vcdとその拡張。ここでは、expand.dftを使うためにload

2 オンライン集計

2.1 留置A票の問16

2.2 集計画面

3 オンライン集計で作成したダウンロードファイルを読み込む

3.1 Excelファイルを読み込む

.d00 <- read_excel("Data/Q16abc_Age_Sex1693781991196.xls",skip = 3)
## New names:
## • `` -> `...2`
## • `` -> `...3`
## • `` -> `...4`
.d0 <- read_excel("Data/Q16abc_Age_Sex1693781991196.xls",skip = 4) %>% 
       slice(-251) # 最終行N=を削除
## New names:
## • `` -> `...5`
## • `` -> `...6`
## • `` -> `...7`
## • `` -> `...8`
## • `` -> `...9`
## • `` -> `...10`
## • `` -> `...11`
## • `` -> `...12`
## • `` -> `...13`
## • `` -> `...14`
## • `` -> `...15`
## • `` -> `...16`
## • `` -> `...17`
## • `` -> `...18`
## • `` -> `...19`
## • `` -> `...20`
## • `` -> `...21`
## • `` -> `...22`
## • `` -> `...23`
## • `` -> `...24`
## • `` -> `...25`
## • `` -> `...26`
## • `` -> `...27`
## • `` -> `...28`
## • `` -> `...29`
## • `` -> `...30`
## • `` -> `...31`
## • `` -> `...32`
## • `` -> `...33`
## • `` -> `...34`
## • `` -> `...35`
## • `` -> `...36`
## • `` -> `...37`
## • `` -> `...38`
## • `` -> `...39`
## • `` -> `...40`
## • `` -> `...41`
## • `` -> `...42`
## • `` -> `...43`
## • `` -> `...44`
## • `` -> `...45`
## • `` -> `...46`
## • `` -> `...47`
## • `` -> `...48`
## • `` -> `...49`
## • `` -> `...50`
## • `` -> `...51`
## • `` -> `...52`
## • `` -> `...53`
## • `` -> `...54`
## • `` -> `...55`
## • `` -> `...56`

3.2 年齢の列名を取得

.d00 %>% names -> col_age
col_age
##  [1] "問1(2)年 齢" "...2"        "...3"        "...4"        "20"         
##  [6] "21"          "22"          "23"          "24"          "25"         
## [11] "26"          "27"          "28"          "29"          "30"         
## [16] "31"          "32"          "33"          "34"          "35"         
## [21] "36"          "37"          "38"          "39"          "40"         
## [26] "41"          "42"          "43"          "44"          "45"         
## [31] "46"          "47"          "48"          "49"          "50"         
## [36] "51"          "52"          "53"          "54"          "55"         
## [41] "56"          "57"          "58"          "59"          "60"         
## [46] "61"          "62"          "63"          "64"          "65"         
## [51] "66"          "67"          "68"          "69"          "70"         
## [56] "Total"

3.3 列名を組み合わせる

c(.d0 %>% names %>% .[1:4], .d00 %>% names %>% .[5:56]) -> c_names
c_names
##  [1] "問16.ア)男性は外で働き、女性は家庭を守るべきである" 
##  [2] "問16.イ)男の子と女の子は違った育て方をすべきである"
##  [3] "問16.ウ)家事や育児には、男性よりも女性がむいている" 
##  [4] "問1(1)性 別"                                       
##  [5] "20"                                                
##  [6] "21"                                                
##  [7] "22"                                                
##  [8] "23"                                                
##  [9] "24"                                                
## [10] "25"                                                
## [11] "26"                                                
## [12] "27"                                                
## [13] "28"                                                
## [14] "29"                                                
## [15] "30"                                                
## [16] "31"                                                
## [17] "32"                                                
## [18] "33"                                                
## [19] "34"                                                
## [20] "35"                                                
## [21] "36"                                                
## [22] "37"                                                
## [23] "38"                                                
## [24] "39"                                                
## [25] "40"                                                
## [26] "41"                                                
## [27] "42"                                                
## [28] "43"                                                
## [29] "44"                                                
## [30] "45"                                                
## [31] "46"                                                
## [32] "47"                                                
## [33] "48"                                                
## [34] "49"                                                
## [35] "50"                                                
## [36] "51"                                                
## [37] "52"                                                
## [38] "53"                                                
## [39] "54"                                                
## [40] "55"                                                
## [41] "56"                                                
## [42] "57"                                                
## [43] "58"                                                
## [44] "59"                                                
## [45] "60"                                                
## [46] "61"                                                
## [47] "62"                                                
## [48] "63"                                                
## [49] "64"                                                
## [50] "65"                                                
## [51] "66"                                                
## [52] "67"                                                
## [53] "68"                                                
## [54] "69"                                                
## [55] "70"                                                
## [56] "Total"

3.4 変数名を付け替え(rename)

colnames(.d0) <- c_names
c_names[1:4] <- c("Q16a","Q16b","Q16c","Sex")
colnames(.d0) <- c_names

3.5 (多元)クロス表から個票を「回復」

  • Q16A、B、Cの空白セルを空白ではないものでtidyr::fillでfillする。
  • pivot_longerで、列に横展開されていた「年齢」を、Ageという変数に格納。
  • Ageを整数に「10歳刻み」にrecodeする。
  • vcd::expand.dftでfreq数行をexpandし、個票を生成する -> Q16abc
.d0 %>% select(-Total) %>% fill(1:3) %>% 
  pivot_longer(-c(1:4),names_to = "Age",values_to = "freq") %>% 
  mutate(Age10=10*as.integer(Age)%/%10) %>% 
  expand.dft(freq = "freq") %>% 
  mutate_all(.funs = factor) -> Q16abc
Q16abc
## # A tibble: 2,827 × 6
##    Q16a     Q16b     Q16c     Sex   Age   Age10
##    <fct>    <fct>    <fct>    <fct> <fct> <fct>
##  1 そう思う そう思う そう思う 男性  20    20   
##  2 そう思う そう思う そう思う 男性  21    20   
##  3 そう思う そう思う そう思う 男性  22    20   
##  4 そう思う そう思う そう思う 男性  28    20   
##  5 そう思う そう思う そう思う 男性  29    20   
##  6 そう思う そう思う そう思う 男性  29    20   
##  7 そう思う そう思う そう思う 男性  30    30   
##  8 そう思う そう思う そう思う 男性  34    30   
##  9 そう思う そう思う そう思う 男性  34    30   
## 10 そう思う そう思う そう思う 男性  37    30   
## # ℹ 2,817 more rows

4 回答カテゴリを簡略化(recode)

conv_vec <- setNames(c("A","B","C","D"),
                     c("そう思う","どちらかといえばそう思う","どちらかといえばそう思わない","そう思わない"))

Q16abc %>% mutate(Q16a=recode_factor(Q16a,!!!conv_vec),
                  Q16b=recode_factor(Q16b,!!!conv_vec),
                  Q16c=recode_factor(Q16c,!!!conv_vec)) -> Q16ABC

5 変化済みのデータを確認

5.1 行数確認

nrow(Q16ABC)
## [1] 2827

5.2 変数ごとの回答分布を確認する

summary(Q16ABC)
##    Q16a        Q16b       Q16c        Sex            Age       Age10   
##  A   : 246   A   :277   A   : 572   女性:1484   57     :  98   20:325  
##  B   : 727   B   :754   B   :1141   男性:1343   65     :  96   30:516  
##  C   : 677   C   :647   C   : 418               55     :  89   40:562  
##  D   :1057   D   :985   D   : 545               61     :  87   50:684  
##  DKNA: 120   DKNA:164   DKNA: 151               64     :  87   60:726  
##                                                 58     :  81   70: 14  
##                                                 (Other):2289

6 Rオブジェクトとして保存

#save(Q16ABC,file="Q16ABC.rda")