開始使用免費開始

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
___
編輯並執行程式碼