【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)

【R】アンケート調査のリコード:二択からダミー変数を作成する自作関数q_dum2()

社会調査などのアンケート調査の分析では、リコードという作業が欠かせません。そのための自作パッケージq_recodeから、二択からダミー変数を作成する自作関数q_dum2()の説明です。


選択肢を逆転させる自作関数r_rev()についてはこちら:
chiikiokoshi.hatenablog.com



質問紙調査のリコードでは、何度も何度も似たような処理をします。統計環境Rでリコードの作業を効率化するため、自作関数をパッケージqrecodeにまとめて、公開しました(現在は選択肢を逆転させる関数q_rev()と、「1:男性 2:女性」を「1:男性 0:女性」あるいは「1:女性 2:男性」にリコードする関数q_dum2()のみが実装されていますが、順次バージョンアップしていく予定です)。

パッケージqrecodeのソースコード
github.com


自分がリコードをしていくさい、「1:はい 2:いいえ」という選択肢1と2を「1:はい 0:いいえ」にしたり、「1:男性 2:女性」を「1:男性 0:女性」とする男性ダミー、あるいは逆に「1:女性 0:男性」とする女性ダミーを作成するというように、選択肢1と2を0と1(あるいは1と0)に変換する作業が頻繁にありました。Rでダミー変数を作成する関数はすでにありますが、この1と2を0と1(あるいは1と0)に変換することに特化した関数を作成しました。それがq_dum2()です。


使い方は次のとおりです。

例として、データフレームdfに含まれるQ1性別の選択肢「1:男性 2:女性」から
「1:男性 0:女性」とする男性ダミー、
「0:男性 1:女性」とする女性ダミーを作成します。


まず、パッケージqrecodeをインストールして読み込みます。

#パッケージqrecodeのインストールはこちら:
library(devtools)
remotes::install_github("https://github.com/hayatokatagiri/qrecode.git")
library(qrecode) #パッケージの読み込み


その上で、選択肢1、2を1、0にしたい場合は、

df$男性ダミー <- q_dum2(df$Q1)

と書きます。

すると、次のように出力されます。男性の1は1のまま、女性の2は0に変換されています。

[1] "Crosstable of the old variable"
old
   1    2 
1459 1785 
[1] "Crosstable of the new variable"
new
   0    1 
1785 1459 

あるいは、逆に選択肢1、2を0、1にしたい場合は、

df$女性ダミー <- q_dum2(df$Q1, rev = T)

とrev = Tと指定すれば作成できます。出力は次のようになります。先ほどとは逆の結果です。

[1] "Crosstable of the old variable"
old
   1    2 
1459 1785 
[1] "Crosstable of the new variable"
new
   0    1 
1459 1785 

みなさまのリコード作業のお役に立てれば幸いです。

【R】アンケート調査のリコード:選択肢の逆転項目を作成する自作関数q_rev()

社会調査などのアンケート調査の分析では、リコードという作業が欠かせません。
「あなたは幸せですか?」という質問Q1に、「1.そう思う / 2.ややそう思う / 3.あまりそうは思わない / 4.そうは思わない 5.わからない」という選択肢があったとします。しかし、Q1をそのまま「幸福度」とした場合、1が一番高くて4が一番低い、ではわかりづらく、5.のわからないは不要です。そこで、1が一番幸福度が低くて4が一番高くなるように選択肢を逆転させて、5を除外した新しい変数を作る必要があります。この作業がリコードです。


質問紙調査のリコードでは、何度も何度も似たような処理をします。上に挙げた逆転の処理もそのひとつです。統計環境Rでリコードの作業を効率化するため、自作関数をパッケージqrecodeにまとめて、公開しました(現在はこの記事で取り上げる選択肢を逆転させる関数q_rev()と、「1:男性 2:女性」を「1:男性 0:女性」あるいは「1:女性 2:男性」にリコードする関数q_dum2()のみが実装されていますが、順次バージョンアップしていく予定です)。

パッケージqrecodeのソースコード
github.com


この記事では、qrecodeパッケージにある、リッカート尺度などの順序尺度を逆転させるための関数q_rev()について解説します。この関数を使えば、選択肢を逆転させる処理を一行で済ますことができます。


q_rev()は、もとの変数から、選択肢を逆転させた新しい変数を作成します(逆転項目、反転項目)。

新変数 <- q_rev(もとの変数, DK = 5)と書きます。

DK = 5と指定すると、5のわからないを除外することがします。DK = c(5,88888)などと、除外する値は複数指定することができます。

除外する選択肢がなければDKは指定せず、新変数 <- q_rev(もとの変数)とすればよいです。

データフレームdfにもとの変数が含まれていて、新たな変数もそのdfに追加したい場合は、df$新変数 <- q_rev(df$もとの変数, DK = 5)と書きます。DKがなければdf$新変数 <- q_rev(df$もとの変数)と書けばよいです。

先ほどの、質問Q1を逆転させて新しい変数「幸福度」を作成する方法は次のとおりです。

まず、パッケージqrecodeをインストールして読み込みます。

#パッケージqrecodeのインストールはこちら:
library(devtools)
remotes::install_github("https://github.com/hayatokatagiri/qrecode.git")
library(qrecode) #パッケージの読み込み

その上で、

幸福度 <- q_rev(Q1, DK = 5)

と書きます。

DKは、DK=c(8, 9)など、複数の値を指定することができます。


上記を実行すると、Rのコンソール上に次のような表示がされます。

[1] "Crosstable of the old variable"
old
   1    2    3    4    5 
 854 1425  431  138  386 
[1] "Alternatives of the old variable without DK"
[1] 1 2 3 4
[1] "Alternatives of the new variable"
[1] 4 3 2 1
[1] "Crosstable of the new variable"
new
   1    2    3    4 
 138  431 1425  854 


q_rev()を実行すると、インプットしたもとの関数のクロス集計(table()関数)の結果がoldの下に表示され、変換後の変数のクロス集計がnewの下に表示されます。この表示で自分が望むように変換できているかを確認することができます。変換された変数Q1を逆転させた値が、新しい変数「幸福度」に代入されます。

みなさまのリコード作業のお役に立てれば幸いです。

平成29年度礼文町「地域おこし」をめぐる地域住民の意識調査

2017年に、礼文町地域おこし協力隊として、礼文島の全世帯の約半数を対象に「地域おこし」や地域おこし協力隊に関する意識調査を実施しました。この記事には結果等を載せています。

 

調査結果

結果概要

調査内容・調査結果の概要を1枚の紙にまとめたものです。

2018年2月の回覧版で礼文島の全世帯に回しました。

調査結果概要.pdf

 

集計結果報告書

集計結果報告書.pdf

 

学会報告

2019年4月13日の農村計画学会春季大会(東京大学)にて調査結果に関するポスター発表を行いました。

発表要旨

ポスター

自由記述のテキストデータ

問2-2b.「地域おこし」について、どんなことをやってみたいですか。

Q02020b.txt

問2-3.礼文町に「こんな店あったら利用したいな」と思うような店はありますか(カラオケボックス、イタリアン、映画館など)。自由にお答えください。

Q02030.txt

 「欲しい店」の詳細データ(居住地域、年齢、性別、職業、今後の礼文島滞在見通しを含んだ個票データ)

rebun_demands_store.csv

問2-4b. 現在、ご自身が実際に企画あるいは実行している地域の活動(イベント等)はどのようなものですか。お答えのできる範囲で教えてください。

Q02040b.txt

問3-1d. 地域おこし協力隊と接していく中で、変わった点について、具体的な内容を教えてください。

Q03010d.txt

問3-3.協力隊等、外部から来た人材に対して期待しますか。の具体的な内容

Q03030.txt

調査計画書

調査計画書.pdf

 

調査結果活用事例

アンケートで拾った声をもとに、礼文町地域おこし協力隊主催で2018年4月21日にフリーマーケットを開催する予定です。

フリーマーケット案内.pdf

メディア掲載

2018年2月3日北海道新聞「ひと 2018」内にて著者の調査活動が紹介されました。

cookingrebun.hatenablog.com

 

2018年3月18日北海道新聞のコラムにて、本調査の結果が紹介されました。

cookingrebun.hatenablog.com