A estas alturas no os sorprenderá que sea un fan del paquete dplyr de R. Hoy os voy a presentar otra de las novedades de la familia, incluida en la recientemente publicada versión 1.0.0.
Se trata de una serie de funciones para alterar filas y está inspirada en UPDATE, INSERT, UPSERT y DELETE de SQL. Como las funciones “join”, estas funciones trabajan con una dupla de data frames.
Datos
Para el desarrollo de este post voy a trabajar con una data frame que contiene un extracto de la clasificación de LaLiga Santander tras la jornada 29:
Nuevas funciones
- rows_update(x, y) actualiza filas existentes en x con los valores de y.
- rows_patch(x, y) parecida a la anterior pero solo actualiza los valores NA.
- rows_insert(x, y) añade filas nuevas a x a partir de los valores de y.
- rows_upsert(x, y) actualiza filas existentes (en x) y añade nuevas filas (en x) a partir de los valores de y.
- rows_delete(x, y) elimina filas de x que cumplan los criterios de y.
Insertar filas
Vamos a incluir al séptimo clasificado, el Villarreal:
Al utilizar el pipeline (%>%), el data frame “x” (clasLiga) queda fuera de la función. El data frame “y” es nuevos (lo hemos definido en la línea previa al pipeline).
Si intentamos introducir una fila que ya existe, R nos devolverá un mensaje de error.
Actualizar filas
Vamos a actualizar los puntos de la Real… a 60. Soñar es libre 🙂
Si intentamos actualizar un equipo que no existe, obtendremos un mensaje de error:
Actualizar filas (valores NA)
Una variante de la actualización consiste en actualizar solo aquellas filas en las que los valores sean NA.
En este caso, actualizaremos las filas de clasLiga donde el equipo sea “Barcelona”, “Atlético”, “Real Madrid” o “Sevilla” y en los que la columna “Dest.” sea NA (valor perdido).
Este es el resultado:
Solo ha actualizado las filas del Real Madrid y del Atlético porque son las únicas en las que la variable “Dest.” tenía valor perdido (NA).
Actualizar o insertar filas
La función rows_upsert() actualizará aquellas filas ya existentes y creará las no existentes.
Este es el resultado:
Los puntos de la Real Sociedad han sido actualizados a 60 y hemos introducido una nueva observación para los 44 puntos del Villarreal.
Eliminar filas
Por último, la función rows_delete() nos permite eliminar la(s) fila(s) que cumplan un determinado criterio.
Este es el resultado:
Real Madrid y Atlético tienen valores NA en la columna Dest. ya que no estamos asignando los resultados de los diferentes pipelines a ninguna variable; solo estamos mostrando los resultados por pantalla.
Podéis descargar el código utilizado en este enlace.
Espero que os haya resultado interesante. ¡Hasta pronto!
datacy – data driven decisions