library(tidyverse) # データ前処理の基本ツール
library(readxl) # Excelデータを読み込む
library(vcdExtra) # vcdとその拡張。ここでは、expand.dftを使うためにload
skip=は読み飛ばし行数
.d00として3行読み飛ばしているのは、年齢の列名を取得するため。
.d0 に本体。4行読み飛ばし。そのあと、変数名、カテゴリを書き換える。
.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`
.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"
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"
colnames(.d0) <- c_names
c_names[1:4] <- c("Q16a","Q16b","Q16c","Sex")
colnames(.d0) <- c_names
.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
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
nrow(Q16ABC)
## [1] 2827
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
#save(Q16ABC,file="Q16ABC.rda")