ifelse()
Une fonction très utile à connaître est ifelse(). Elle permet d'écrire une instruction if sur une seule ligne de code et, mieux encore, elle fonctionne sur des vecteurs entiers!
Supposons que vous ayez un vecteur de cours boursiers. Et si vous vouliez retourner "Buy!" chaque fois que apple > 110, et "Do nothing!" sinon? Une simple instruction if ne suffirait pas pour résoudre ce problème. Par contre, avec ifelse() vous pouvez faire :
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() évalue test pour obtenir un vecteur logique, et là où le vecteur logique vaut TRUE, il remplace TRUE par la valeur de yes. De même, FALSE est remplacé par no.
La trame de données stocks est à votre disposition.
Cette activité fait partie du cours
R intermédiaire pour la finance
Instructions de l’exercice
- Utilisez
ifelse()pour tester simicrest supérieur à60mais inférieur à62. Si c'est vrai, retournez1, sinon0. Ajoutez le résultat àstockscomme colonnemicr_buy. - Utilisez
ifelse()pour tester siappleest supérieur à117. La valeur retournée doit être la colonnedatesiTRUE, etNAsinon. - Affichez
stocks.dateest devenu numérique!ifelse()enlève l'attribut de date avant de le retourner, donc il devient un numérique. - Attribuez à la colonne
apple_datelaclass()de"Date". - Affichez de nouveau
stocks.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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
___