library(tidyverse)
パッケージ
Googleフォームなどのマルチアンサーの処理
googleフォームでマルチアンサー形式の設問を作ると、以下のようにカンマで区切られた形式でデータが入力される。
<-
data tibble(
q1 = c('A,B,C', 'A,B', 'A,C', 'B,C', 'A', 'B', 'C'),
|>
) mutate(id = row_number()) |>
relocate(id, .before = q1)
data
# A tibble: 7 × 2
id q1
<int> <chr>
1 1 A,B,C
2 2 A,B
3 3 A,C
4 4 B,C
5 5 A
6 6 B
7 7 C
まずはカンマで区切られているやつを分割する。
|>
data separate_longer_delim(cols = q1, delim = ',')
# A tibble: 12 × 2
id q1
<int> <chr>
1 1 A
2 1 B
3 1 C
4 2 A
5 2 B
6 3 A
7 3 C
8 4 B
9 4 C
10 5 A
11 6 B
12 7 C
このデータの意味自体は、id:1はA,B,Cを選択した、というものである。
なのでフラグとして1を立てておく。
|>
data separate_longer_delim(cols = q1, delim = ',') |>
mutate(flag = 1)
# A tibble: 12 × 3
id q1 flag
<int> <chr> <dbl>
1 1 A 1
2 1 B 1
3 1 C 1
4 2 A 1
5 2 B 1
6 3 A 1
7 3 C 1
8 4 B 1
9 4 C 1
10 5 A 1
11 6 B 1
12 7 C 1
つぎにこれを横持ちに展開する。
|>
data separate_longer_delim(cols = q1, delim = ',') |>
mutate(flag = 1) |>
pivot_wider(names_from = q1, values_from = flag)
# A tibble: 7 × 4
id A B C
<int> <dbl> <dbl> <dbl>
1 1 1 1 1
2 2 1 1 NA
3 3 1 NA 1
4 4 NA 1 1
5 5 1 NA NA
6 6 NA 1 NA
7 7 NA NA 1
これで、A,B,Cの選択状況がわかるようになった。
非選択がNAになっているのは少々アレなので、0で埋めるようにする。
|>
data separate_longer_delim(cols = q1, delim = ',') |>
mutate(flag = 1) |>
pivot_wider(names_from = q1, values_from = flag, values_fill = 0)
# A tibble: 7 × 4
id A B C
<int> <dbl> <dbl> <dbl>
1 1 1 1 1
2 2 1 1 0
3 3 1 0 1
4 4 0 1 1
5 5 1 0 0
6 6 0 1 0
7 7 0 0 1
これでダミー変数に変換できた。
もともとの変数名であるq1が消えてしまっているので、それを残すにはnames_prefix
を指定する。
|>
data separate_longer_delim(cols = q1, delim = ',') |>
mutate(flag = 1) |>
pivot_wider(
names_from = q1,
names_prefix = 'q1_',
values_from = flag,
values_fill = 0
)
# A tibble: 7 × 4
id q1_A q1_B q1_C
<int> <dbl> <dbl> <dbl>
1 1 1 1 1
2 2 1 1 0
3 3 1 0 1
4 4 0 1 1
5 5 1 0 0
6 6 0 1 0
7 7 0 0 1