ifelse()
一个非常实用的函数是 ifelse()。它可以用一行代码写出 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 中的值替换。类似地,FALSE 会用 no 替换。
stocks 数据框已为您准备好。
本练习是课程的一部分
R 金融中级
练习说明
- 使用
ifelse()测试micr是否高于60且低于62。若为真返回1,否则返回0。将结果作为micr_buy列添加到stocks。 - 使用
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
___