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 的位置,就用 yes 的內容取代 TRUE。同樣地,FALSE 會被 no 取代。
stocks 資料框已經為你準備好可以使用。
本練習屬於課程
R 金融中級
練習說明
- 使用
ifelse()測試micr是否大於60且小於62。若為真回傳1,否則回傳0。把結果新增到stocks,欄位名稱為micr_buy。 - 使用
ifelse()測試apple是否大於117。若為TRUE,回傳date欄位的值;否則回傳NA。 - 印出
stocks。你會發現date變成數值了!ifelse()在回傳前會移除日期的屬性,所以它會變成數值。 - 把
apple_date欄位的class()指定為"Date"。 - 再次印出
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
___