ifelse()
知っておくと強力な関数が ifelse() です。これは1行で if 文を書けるうえ、ベクトル全体にも適用できます。
株価のベクトルがあるとしましょう。apple > 110 のときは毎回 "Buy!" を返し、それ以外は "Do nothing!" を返したい場合はどうでしょうか。単純な if 文だけでは対応しきれません。しかし、ifelse() を使えば次のように書けます。
apple
[1] 109.49 109.90 109.11 109.95 111.03 112.12
ifelse(test = apple > 110, yes = "Buy!", no = "Do nothing!")
[1] "Do nothing!" "Do nothing!" "Do nothing!" "Do nothing!" "Buy!"
[6] "Buy!"
ifelse() は test を評価して論理ベクトルを作り、その論理ベクトルが TRUE の位置では TRUE を yes の中身で置き換えます。同様に、FALSE は no で置き換えられます。
stocks データフレームが用意されています。
この演習はコースの一部です
金融のための中級R
演習の手順
ifelse()を使って、micrが60より大きく、かつ62未満かを判定してください。真なら1、偽なら0を返し、その結果をmicr_buy列としてstocksに追加します。ifelse()を使って、appleが117より大きいかを判定します。TRUEの場合はdate列、そうでなければNAを返してください。stocksを出力します。dateが数値になってしまいましたね。ifelse()は返す際に日付の属性を取り除いてしまうため、数値になります。apple_date列に"Date"のclass()を割り当ててください。- もう一度
stocksを出力します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Microsoft test
stocks$micr_buy <- ifelse(test = ___, yes = ___, no = ___)
# Apple test
stocks$apple_date <- ifelse(test = ___, yes = stocks$date, no = NA)
# Print stocks
___
# Change the class() of apple_date.
class(___) <- ___
# Print stocks again
___