Manipulación de datos
Tidy data
Almacena datos en una forma consistente
Cada columna una variable
Cada fila es una observación
Tidy data
Tidy data
Tidy data
Tidy data
Tidy data
La siguiente tabla muestra el números de veces que tres especies de peces fueron capturados con línea de mano
Especie | Presencia | Ausencia |
pintadilla | 1 | 4 |
tramboyo | 3 | 2 |
lenguado | 5 | 0 |
¿Cuántas variables puedes observar?
La siguiente tabla muestra el números de veces que tres especies de peces fueron capturados con línea de mano
Especie | Presencia | Ausencia |
pintadilla | 1 | 4 |
tramboyo | 3 | 2 |
lenguado | 5 | 0 |
¿Cuántas variables puedes observar?
La siguiente tabla muestra el números de veces que tres especies de peces fueron capturados con línea de mano
Especie | Presencia | Ausencia |
pintadilla | 1 | 4 |
tramboyo | 3 | 2 |
lenguado | 5 | 0 |
¿Cómo podrías acceder a los elementos
La siguiente tabla muestra el números de veces que tres especies de peces fueron capturados con línea de mano
dato_peces[[1,3]], dato_peces[[2,2]], dato_peces[[2,3]], dato_peces[[3,2]], dato_peces[[3,3]])
¿Simple?
Especie | Presencia | Ausencia |
pintadilla | 1 | 4 |
tramboyo | 3 | 2 |
lenguado | 5 | 0 |
¿Cómo podrías acceder a los elementos
¿Alternativas?
¿Alternativas? Reestructurar la tabla
especie | presencia | ausencia |
pintadilla | 1 | 4 |
tramboyo | 3 | 2 |
lenguado | 5 | 0 |
especie | ocurrencia | n |
pintadilla | presencia | 1 |
tramboyo | presencia | 3 |
lenguado | presencia | 5 |
pintadilla | ausencia | 4 |
tramboyo | ausencia | 2 |
lenguado | ausencia | 0 |
Formato ancho
Formato largo
¿Cuál prefieres?
Por ejemplo, en la base de datos hydro
presion | estacion_1 | estacion_2 |
1 | 14.1 | 15.3 |
2 | 14.0 | 15.4 |
3 | 14.0 | 15.2 |
4 | 13.9 | 15.0 |
5 | 13.8 | 14.9 |
Solución: Reestructurar la tabla
presion | estacion_1 | estacion_2 |
1 | 14.1 | 15.3 |
2 | 14.0 | 15.4 |
3 | 14.0 | 15.2 |
4 | 13.9 | 15.0 |
5 | 13.8 | 14.9 |
estacion | presion | temp |
1 | 1 | 14.1 |
1 | 2 | 14 |
1 | 3 | 14 |
1 | 4 | 13.9 |
1 | 5 | 13.8 |
2 | 1 | 15.3 |
2 | 2 | 15.4 |
2 | 3 | 15.2 |
2 | 4 | 15.0 |
2 | 5 | 14.9 |
fecha | lat | long |
| | |
| | |
Ahora puedes agregar más variables
Formato ancho
Formato largo
Esta tabla contiene los valores de temperatura por estación y presión
¿Cómo cambiar el formato de tus datos?
tidyr provee dos funciones útiles para esos casos:
pivot_longer()
Mueve los nombres de las columnas a una columna clave, reuniendo los valores de las columnas en una única columna de valores.
especie | presencia | ausencia |
pintadilla | 1 | 4 |
tramboyo | 3 | 2 |
lenguado | 5 | 0 |
especie | ocurrencia | n |
pintadilla | presencia | 1 |
tramboyo | presencia | 3 |
lenguado | presencia | 5 |
pintadilla | ausencia | 4 |
tramboyo | ausencia | 2 |
lenguado | ausencia | 0 |
pivot_longer(df, cols = x, names_to = “var1”, values_to = “var2”)
Tus datos
las variables que desea apilar
Encabezado de la nueva variable
pivot_wider()
Desplaza los valores únicos de una columna clave a los nombres de columna, repartiendo los valores de una columna de valor entre las nuevas columnas.
especie | ocurrencia | n |
pintadilla | presencia | 1 |
tramboyo | presencia | 3 |
lenguado | presencia | 5 |
pintadilla | ausencia | 4 |
tramboyo | ausencia | 2 |
lenguado | ausencia | 0 |
pivot_wider(df, names_from = “ocurrencia”,, values_to = “n”)
las variables categóricas se vuelven en nuevas columnas
especie | ausencia | presencia |
pintadilla | 4 | 1 |
tramboyo | 2 | 3 |
lenguado | 0 | 5 |
Columnas alfabeticamente ordenadas
Ejemplo. En la consola de R escribe lo siguiente
Ejercicios
Ejercicio 1: Reestructura el dataframe
¿Por que pivot_longer() y pivot_wider() no son perfectamente simétricos? Considera el siguiente ejemplo
Ejercicio 1: Reestructura el dataframe
¿Por que pivot_longer() y pivot_wider() no son perfectamente simétricos? Considera el siguiente ejemplo
Ahora convertimos los datos a formato ancho y largo respectivamente:
¿Cual es la diferencia entre stock y stock_long?
Ejercicio 2: Reestructura el dataframe
Para qué sirve el argumento “names_to” de pivot_longer() :
Ejercicio 2: Reestructura el dataframe
Para qué sirve el argumento “names_to” de pivot_longer() :
Separando y uniendo celdas
Usa las siguientes funciones para separar o combinar celdas: separate(), separate_row(), unite()
zona_est | temp |
25_BY5 | 14.1 |
26_BMPJ2 | 14 |
26_J56 | 14 |
26_K32 | 13.9 |
27_B1 | 13.8 |
28_BY15 | 15.3 |
29_F64 | 15.4 |
30_SR5 | 15.2 |
30_US5B | 15.0 |
zona | est | temp |
25 | BY5 | 14.1 |
26 | BMPJ2 | 14 |
26 | J56 | 14 |
26 | K32 | 13.9 |
27 | B1 | 13.8 |
28 | BY15 | 15.3 |
29 | F64 | 15.4 |
30 | SR5 | 15.2 |
30 | US5B | 15.0 |
zona | est | temp |
25 | BY5 | 14.1 |
26 | BMPJ2 | 14 |
26 | J56 | 14 |
26 | K32 | 13.9 |
27 | B1 | 13.8 |
28 | BY15 | 15.3 |
29 | F64 | 15.4 |
30 | SR5 | 15.2 |
30 | US5B | 15.0 |
zona_est | temp |
25/BY5 | 14.1 |
26/BMPJ2 | 14 |
26/J56 | 14 |
26/K32 | 13.9 |
27/B1 | 13.8 |
28/BY15 | 15.3 |
29/F64 | 15.4 |
30/SR5 | 15.2 |
30/US5B | 15.0 |
separate(df, zona_est, into = c(“zona”, “est”))
unite(df_split, zona, est, col = “zona_est”, sep = “/”))
separate()
unite()
Ejercicios
Ejercicio 3: Ejecute el siguiente código
Ejercicio 3: Ejecute el siguiente código
¿Qué hacen los argumentos extra y fill en separate()? Experimente con las distintas opciones para los dos conjuntos de datos siguientes.
Ejercicio 4: separate y unite
Tanto unite() como separate() tienen un argumento remove. ¿Para qué sirve?
Ejercicio 4: separate y unite
Tanto unite() como separate() tienen un argumento remove. ¿Para qué sirve?
Valores perdidos (NAs)
Valores NAs
¿Qué hacer?
Valores NAs
Puede aplicar la función is.na() a vectores individuales y variables individuales en un dataframe tal y como lo hicimos en las lecciones anteriores. Por ejemplo:
Recuerde que la función is.na() devuelve un vector lógico de la misma longitud que el vector original (¡que tiene, en nuestro caso, 30012 valores!).
Si usas la función sum() puedes calcular la suma de todos los valores TRUE, es decir, el total de valores NA de este vector:
Puedes hacer lo mismo para el dataframe completo
Una forma rápida de explorar la presencia de valores NA en una base de datos es utilizando la función summary(), que muestra no sólo el total de valores NA si no que también algunas estadísticas descriptivas.
Valores NAs
tidyr provee 3 funciones útiles para lidiar con valores NAs.
est | pres | temp |
1608 | 1 | 14.1 |
1608 | 2 | NA |
1608 | 3 | 13.8 |
1608 | 4 | NA |
1608 | 5 | 13.6 |
est | pres | temp |
1608 | 1 | 14.1 |
1608 | 3 | 13.8 |
1608 | 5 | 13.6 |
est | pres | temp |
1608 | 1 | 14.1 |
1608 | 2 | 14.1 |
1608 | 3 | 13.8 |
1608 | 4 | 13.8 |
1608 | 5 | 13.6 |
est | pres | temp |
1608 | 1 | 14.1 |
1608 | 2 | -999 |
1608 | 3 | 13.8 |
1608 | 4 | -999 |
1608 | 5 | 13.6 |
drop_na(data = df, temp)
fill(data = df, temp)
replace_na(data = df, replace = list(temp = -999))
Valores NAs
Para reemplazar valores distintos a NAs, utiliza las reglas de indexación y los operadores de subconjunto que has aprendido hasta ahora:
Valores NAs
Para reemplazar valores distintos a NAs, utiliza las reglas de indexación y los operadores de subconjunto que has aprendido hasta ahora:
Valores NAs
Una función útil para identificar la posición de los elementos de un vector para los que se cumplen las condiciones especificadas es which(). Identifiquemos el valor o los valores de temperatura que son iguales al valor máximo de temperatura observado y establezcamos este/estos como NA:
Ejercicios
Ejercicio 5: Valores NAs
¿Cuáles son las consecuencias si se hace esto?
Ejercicio 6: Valores NAs
Restaura el dataframe original (incluyendo los NAs en temp) y averigua cómo cambiar los NAs (con el valor anterior) en ambas variables 'temp' y 'sal' en un solo paso.
Ejercicio 7:
Ejercicio 5 (SOLUCIÓN)
Ejercicio 6 (SOLUCIÓN)
Restaura el dataframe original (incluyendo los NAs en temp) y averigua cómo cambiar los NAs (con el valor anterior) en ambas variables 'temp' y 'sal' en un solo paso.