【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を逆転させた値が、新しい変数「幸福度」に代入されます。

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