ifelse()
Una función muy útil que conviene conocer es ifelse(). Crea una sentencia if en una sola línea de código y, además, ¡funciona sobre vectores completos!
Imagina que tienes un vector de precios de acciones. ¿Qué pasa si quieres devolver "Buy!" cada vez que apple > 110, y "Do nothing!" en caso contrario? Un simple if no sería suficiente para resolverlo. Sin embargo, con ifelse() puedes hacer:
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() evalúa test para obtener un vector lógico, y donde ese vector lógico es TRUE reemplaza TRUE por lo que haya en yes. Del mismo modo, FALSE se reemplaza por no.
El data frame stocks está disponible para que lo uses.
Este ejercicio forma parte del curso
R intermedio para finanzas
Instrucciones del ejercicio
- Usa
ifelse()para comprobar simicrestá por encima de60pero por debajo de62. Si es cierto, devuelve1y, si es falso, devuelve0. Añade el resultado astockscomo la columnamicr_buy. - Usa
ifelse()para comprobar siapplees mayor que117. El valor devuelto debe ser la columnadatesi esTRUE, yNAen caso contrario. - Imprime
stocks. ¡datese ha convertido en numérico!ifelse()elimina el atributo de fecha antes de devolverlo, por eso pasa a ser numérico. - Asigna a la columna
apple_datelaclass()de"Date". - Vuelve a imprimir
stocks.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# 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
___