「〇点以上のときは分析対象」みたいな感じで判定を行うときなど、何かしら条件分岐を使うときがありますが、そのたびに、やり方調べてしまったりするので、備忘録的にまとめます。
結論から言うと、Rでは、ifelse()を使います。
いつもif()って書いてしまうから、間違えがち。
ifelse()の基本的な使い方
ifelse()の関数式は以下のような内容です。
基本的にExcelとかでif文使うときと同じ要領です。
ifelse(条件式 ,条件式が真の場合の行動, 条件式が偽の場合の行動)
例えば、引っ越し先を考えるうえで、家賃10万以上は高くて嫌だと考える場合は、
- 条件式:家賃の値段は10万未満か否か?
- 真の場合:妥当と判定
- 偽の場合(10万より上):高いと判定
となります。
また、入れ子構造にすることで、条件式を複数設定することも可能です。
ifelse(条件式A ,条件式Aが真の場合の行動, ifelse(条件式B , 条件式Aが偽かつ、条件式Bが真の場合の行動, 条件式A・Bともに偽の場合の行動))
同様の例で言うと、引っ越し先を考えるうえで、家賃10万以上は高くて嫌だけど、相場よりも安すぎても不安だなと感じる場合などです。
例えば、家賃データが以下のようにあったとします。
家賃<-c(10.2,7.4,8.1,6.3,7,10.8,10.9,10.3,12.8) dat<-data.frame(家賃)
家賃データの入ったdatについて、家賃列のとなりに、家賃判定列を作りたいと思います。
条件としては、先ほどの例のように、家賃10万以上は高くて嫌だけど、相場(ここでは7万とします)より安いのも不安みたいな条件にしましょう。
ifelse()を使うと以下のようになります。
dat$家賃判定<-ifelse(dat$家賃<=7,"安い", ifelse(dat$家賃<10,"いいくらい","高い"))
実行すると以下のようになります。
> dat 家賃 家賃判定 1 10.2 高い 2 7.4 いいくらい 3 8.1 いいくらい 4 6.3 安い 5 7.0 安い 6 10.8 高い 7 10.9 高い 8 10.3 高い 9 12.8 高い
まとめ
ifelse文を使うことで、例えば単純な逆転処理ではない置換処理が必要な場合や、分析対象者かどうかの判定を行うときなどを楽に行えると思います。
条件式を入力する際には、その条件が矛盾していないか、全体を網羅しているかどうかといったことを実行前に確認し、実行後も正しく判定ができているか目視でも確認するのが大事です。