【R】Google Formの複数選択の選択肢を、それぞれのダミー変数(0,1)の列に変換するコード

Google FormをSpread Sheetに出力したさい、たとえばQ1でAとBとCという3つの選択肢を複数選択した場合、Q1という列のひとつのセルにA;B;Cと入力されています。このA;B;Cについて、それぞれQ1_A、Q1_B、Q1_Cの3つの列を作成し、それぞれが選択されていたら1、選択されていなければ0を入力するようにするコードです。

データフレームdfの、複数選択の質問項目q1を、
Q1_A、Q1_B、Q1_C…と変換します。(A、B、Cは実際の選択肢)

library(tidyverse) #ライブラリの読み込み
table(df$q1, useNA = "always") #もとの変数の値の確認

df$MA <- as.character(df$q1)
df$MA <- gsub("[[:blank:]]","",df$MA) #スペースを削除
MA_split <- strsplit(df$MA, ";") #;で分割

lev <- unique(unlist(MA_split))
MA_dummy <- lapply(MA_split, function(x) table(factor(x, levels=lev)))
df_add <- data.frame(do.call(rbind, MA_dummy))

rename_all(df_add, function(x) glue::glue("Q1_{x}"))
#↑のQ1は好きな文字列にしてください
df <- select(df, -MA)
df <- cbind(df,df_add)