P8. ターゲットリストを使ったフラグ変数の作成
2つのデータフレームを結合するleft_join
などを学ぶ前に、よりシンプルな「情報の接続」方法を紹介します。
例えば、e-Statなどの外部データから「出生率が低い都道府県のリスト」を入手します。
このリストを使って、手元にあるデータセット(naiman_x
)に、
「この回答者は、出生率が低い都道府県に住んでいるか?」という目印(フラグ)を付けたい、という状況を考えます。
今回は、%in%
演算子とif_else()
関数を組み合わせる方法を紹介します。
ステップ1:ターゲットリストを作成する
まず、目印(フラグ)を付けたい対象のリストを、ベクトル(c()
で作成するオブジェクト)で定義します。
このリストは、エクセルからコピペしたり、別の分析結果から持ってきたり、様々な方法で作成できます。
target_values_br <- c(13, 1, 4, 5, 27, 40)
※ 都道府県コードからフラグを立てる想定です。
ステップ2:%in%
とif_else
でフラグ変数を作成する
mutate()
で、if_else()
と%in%
を使い、q41
(回答者の居住都道府県コード)がターゲットリストに含まれているかどうかに基づいて、新しい変数brl
(Birth Rate Lowの略)を作成します。
naiman_brl <- naiman_x %>%
mutate( brl =
if_else( q41 %in% target_values_br, 1, 0 ) )
日本語訳:naiman_xのデータを元にして、ちょいと加工したnaiman_brlっちゅう新しいデータセットを作ってくれへんか。
やってほしいことは
q41の列にあるコードが、前に作ったターゲットリスト (target_values_br) に含まれるか(%in%
)を判断してほしいねん。
仲間やったら1を、仲間やなかったら0を入力した、brlちゅう新しい列を付けておいてほしいねん。
ifelse(q41 %in% target_values_br, 1, 0)の解説
%in%
演算子:「~の仲間かどうか?」を判定
%in%
は、左側にあるq41
の各値が、右側にあるtarget_values_br
というベクトルの中に含まれているか(=仲間かどうか)を、一行ずつ判定していきます。
結果として、TRUE
(仲間である)またはFALSE
(仲間ではない)の論理値ベクトルが返されます。if_else()
関数:「もし仲間なら1、でなければ0」を割り当てるif_else()
は、%in%
が返したTRUE
/FALSE
の結果を受け取ります。- もし結果が
TRUE
なら、1
を返します。(仲間だったら、第2引数を返す) - もし結果が
FALSE
なら、0
を返します。(仲間でなければ、第3引数を返す)
- もし結果が
この組み合わせは、特定の条件に合致するか否かでダミー変数(0/1変数)を作成する際の、鉄板のパターンです。