+ - 0:00:00
Notes for current slide
Notes for next slide

Programación con R

Clase 2

Marília Melo Favalesso

1 / 65

¿Cómo armar mi tabla de datos?

3 / 65

¿Cómo armar mi tabla de datos?


4 / 65

¿Cómo armar mi tabla de datos?


5 / 65

¿Cómo armar mi tabla de datos?

Resumen

Características principales de un conjunto de datos ordenado:

  • cada variable es una columna
  • cada observación es una linea
  • cada valor está en una celda diferente

6 / 65

¿Cómo armar mi tabla de datos?


Descripción de datos:

  • Utilice las hojas de datos de su editor (ex. excel) para almacenar información sobre su tabla.

  • En la primera hoja (hoja 1) dejamos nuestra tabla y en las demás (normalmente la hoja 2, pero si es necesario usamos otras) incluimos información sobre nuestra tabla, como a qué se refieren los datos, descripción de cada variable, alguna observación importante y alguna fecha de edición de esta tabla.

7 / 65

Tidyverse

El tidyverse es una colección obstinada de 📦 R diseñados para la ciencia de datos. Todos los paquetes comparten una filosofía de diseño, una gramática y estructuras de datos subyacentes.

  • Instale el tidyverse completo con:
install.packages("tidyverse")
9 / 65

Tidyverse

10 / 65

Tidyverse

Tidyverse es una colección de 📦 R

  • readr - importación de datos

  • tibble - formato de data.frame mejorado

  • tidyr, dplyr - manipulación de datos

  • ggplot2 - visualizando de datos

  • purrr - programación avanzada

  • forcats - trabajando con factores

  • stringr - trabajando con cadena de caracteres

11 / 65

Tidyverse

Tidyverse es una colección de 📦 R

  • readr - importación de datos

  • tibble - formato de data.frame mejorado

  • tidyr, dplyr - manipulación de datos

  • ggplot2 - visualizando de datos

  • purrr - programación avanzada

  • forcats - trabajando con factores

  • stringr - trabajando con cadena de caracteres

12 / 65

Tidyverse

Flujo de trabajo en ciencia de datos, con Tidyverse

13 / 65

Tidyverse

El creador de Tidyverse es Hadley Wickham y hoy en día muchas personas han contribuido a su expansión.

14 / 65

Tidyverse

R for Data Science


"This book will teach you how to do data science with R: You’ll learn how to get your data into R, get it into the most useful structure, transform it, visualise it and model it. In this book, you will find a practicum of skills for data science. Just as a chemist learns how to clean test tubes and stock a lab, you’ll learn how to clean data and draw plots—and many other things besides. (...)"

https://r4ds.had.co.nz/

15 / 65

Tidyverse

Instale y cargue el paquete Tidyverse en su computadora.

install.packages("tidyverse")
library(tidyverse)

16 / 65

Importar datos a R

17 / 65

Importar datos a R

Para su alivio, no es necesario producir su tabla en R (como lo hemos hecho hasta ahora). Es posible construir la tabla en Excel y luego importar los datos (de HD a nuestra memoria RAM).



La función de importación dependerá del formato en el que se guardó nuestra tabla (.txt, .csv, .xls, .xlsx).

18 / 65

Importar datos a R

Working directory

  • Recuerde que el directorio de trabajo es una 📁 donde R lee y guarda archivos.

  • Deberá decirle a R dónde están los archivos en los que va a trabajar.

# Aquí incluirá la dirección donde están sus archivos en su computadora.
setwd("C:/Users/mmfav/introduccionalR/clase_2/data")
  • Deje todos los archivos guardados en esta misma carpeta, esto facilitará su trabajo.

  • Tenga en cuenta que la dirección aquí se indica con barras invertidas (/), a diferencia de lo que usan algunos sistemas operativos (\). Por ejemplo:

    • : C:\Users\mmfav\introduccionalR\clase_2\data
    • : C:/Users/mmfav/introduccionalR/clase_2/data
19 / 65

Importar datos a R

El 📦 tidyverse readr se usa para importar archivos de texto, como .txt o .csv a R.

reader transforma archivos de texto en tibbles.

  • read_csv(); read_csv2: para archivos separados por comas.
  • read_tsv(): para archivos separados por tabulaciones.
  • read_delim(): para archivos separados por un delimitador genérico. El argumento delim = indica qué carácter separa cada columna del archivo de texto.
  • read_table(): para archivos de texto tabulares con columnas separadas por espacios.
  • read_fwf(): para archivos compactos que deben tener el ancho de cada columna especificado.
  • read_log(): para archivos de registro estándar.
20 / 65

Importar datos a R

El 📦 tidyverse readr se usa para importar archivos de texto, como .txt o .csv a R.

reader transforma archivos de texto en tibbles.

  • read_csv(); read_csv2: para archivos separados por comas.
  • read_tsv(): para archivos separados por tabulaciones.
  • read_delim(): para archivos separados por un delimitador genérico. El argumento delim = indica qué carácter separa cada columna del archivo de texto.
  • read_table(): para archivos de texto tabulares con columnas separadas por espacios.
  • read_fwf(): para archivos compactos que deben tener el ancho de cada columna especificado.
  • read_log(): para archivos de registro estándar.
21 / 65

Importar datos a R

readr: .csv

  • Como ejemplo, usaremos la base de datos que proporcionamos en el repositorio (datos.csv).

  • La función para leer los datos es: read_csv2(file = "archivo.csv").

datos_csv <- read_csv2(file = "datos.csv")
## i Using "','" as decimal and "'.'" as grouping mark. Use `read_delim()` for more control.
## Rows: 3 Columns: 5
## -- Column specification ------------------------------------------------------------------------
## Delimiter: ";"
## chr (1): localidad
## dbl (4): ID, 2001, 2002, 2003
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
22 / 65

Importar datos a R

readr: .csv

  • Como ejemplo, usaremos la base de datos que proporcionamos en el repositorio (datos.csv).

  • La función para leer los datos es: read_csv2(file = "archivo.csv").

datos_csv
## # A tibble: 3 x 5
## ID localidad `2001` `2002` `2003`
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1 Agricola 10 12 15
## 2 2 PNI 20 22 25
## 3 3 Urbano 15 12 10
23 / 65

Importar datos a R

readr: .txt

  • Como ejemplo, usaremos la base de datos que proporcionamos en el repositorio (datos.txt).

  • La función para leer los datos es: read_delim(file = "archivo.txt", delim = "\t").

datos_txt <- read_delim(file = "datos.txt", delim = "\t")
## Rows: 6 Columns: 4
## -- Column specification ------------------------------------------------------------------------
## Delimiter: "\t"
## chr (2): localidad, variable
## dbl (2): ID, value
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
24 / 65

Importar datos a R

readr: .txt

"delim = " es un carácter único utilizado para separar campos dentro de un registro.

25 / 65

Importar datos a R

readr: .txt

  • Como ejemplo, usaremos la base de datos que proporcionamos en el repositorio (datos.txt).

  • La función para leer los datos es: read_delim(file = "archivo.txt", delim = "\t").

datos_txt
## # A tibble: 6 x 4
## ID localidad variable value
## <dbl> <chr> <chr> <dbl>
## 1 1 Agricola temperatura 25
## 2 1 Agricola pluviosidad 10
## 3 2 PNI pluviosidad 23
## 4 2 PNI temperatura 22
## 5 3 Urbano temperatura 30
## 6 3 Urbano pluviosidad 30
26 / 65

Importar datos a R

Exportar datos (write_)

  • Para la mayoría de las funciones read_, existe una función write_ correspondiente.

  • Estas funciones sirven para guardar bases en un formato de archivo específico.

  • Debe especificar el objeto a exportar y el nombre del archivo con la extensión.

# archivo .csv
write.csv2(x = objeto, path = "nombre_tabla.csv")
# como un .txt
write_delim(x = objeto, path = "nombre_tabla.txt", delim = "\t")
27 / 65

Importar datos a R

Exportar datos (write_)

  • Para la mayoría de las funciones read_, existe una función write_ correspondiente.

  • Estas funciones sirven para guardar bases en un formato de archivo específico.

  • Debe especificar el objeto a exportar y el nombre del archivo con la extensión.

# archivo .csv
write.csv2(x = datos_csv, path = "nombre_tabla.csv")
# como un .txt
write_delim(x = datos_txt, path = "nombre_tabla.txt", delim = "\t")
28 / 65

Importar datos a R

¿Qué pasa si mis datos se guardan como un archivo excel?

El 📦 readxl se usa para importar archivos de excel, como .xslx o .xls a R.

  • Instalar:
install.packages("readxl")
  • Cargar el paquete:
library(readxl)

  • ¡¡No es parte del tidyverse !!

29 / 65

Importar datos a R

readxl: .xlsx

Ejemplo:

datos_xlsx <- read_xlsx("datos.xlsx")
30 / 65

Importar datos a R

readxl: .xlsx

Ejemplo:

datos_xlsx
## # A tibble: 24 x 6
## ID localidad ano zona var_respuesta temperatura
## <dbl> <chr> <dbl> <chr> <dbl> <dbl>
## 1 1 Puerto Iguazú - Misiones 2001 agrícola NA 25
## 2 2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
## 3 3 San Pedro - Misiones 2001 agrícola 5 24.2
## 4 4 Tareiri - Misiones 2001 agrícola 4 26.2
## 5 5 Puerto Iguazú - Misiones 2005 agrícola 6 27
## 6 6 Puerto Liberdad - Misiones 2005 agrícola NA 25.5
## 7 7 San Pedro - Misiones 2005 agrícola 7 26
## 8 8 Tareiri - Misiones 2005 agrícola 9 26.5
## 9 9 Puerto Iguazú - Misiones 2001 bosque 30 20
## 10 10 Puerto Liberdad - Misiones 2001 bosque 52 21
## # ... with 14 more rows
31 / 65

Importar datos a R

Un tibble, o tbl_df, es una reinvención moderna del data.frame, manteniendo el tiempo que ha demostrado ser efectivo y descartando lo que no lo es.



  • Es un formato requerido para usar funciones tidyverse.

  • Las variables pueden ser de tipo numérico (int, dbl), carácter (chr), lógicas (lgl) y factor (fctr)


  • Convertir:

data.frame en tibble:

as_tibble(data)

32 / 65

Operador pipe (%>%)

33 / 65

Operador pipe (%>%)

El 📦 magrittr ofrece un perador que hace que su código sea más legible: el pipe (%>%).

La idea del operador pipe (%>%) es bastante simple: use el valor resultante de la expresión de la izquierda como primer argumento de la función de la derecha.

Por ejemplo:

# suma el vector y luego obtén la √ (sqrt):
x <- 1:10
# Sin el pipe:
sqrt(sum(x))
## [1] 7.416198
# Con el pipe:
x %>% sum() %>% sqrt()
## [1] 7.416198
34 / 65

Operador pipe (%>%)

"Más intuitivo hacerlo un poco"

  • SIN el pipe:
piensas(
que(
orden(
la(
en(
codar()
)
)
)
)
)
  • CON el pipe:
codar() %>%
en() %>%
la() %>%
orden() %>%
que() %>%
piensas()

!! El código no solo es más pequeño, es más intuitivo, la lectura se vuelve mucho más fácil !!


35 / 65

tidyr

36 / 65

tidyr

El objetivo del 📦 tidyr es ayudarte a crear datos ordenados.

Los datos ordenados son datos donde:

  • Cada columna es variable.
  • Cada fila es una observación.
  • Cada celda es un valor único.

Tidyr data describe una forma estándar de almacenar datos que se utiliza siempre que sea posible en tidyverse.

Si se asegura de que sus datos estén ordenados, pasará menos tiempo luchando con las herramientas y más tiempo trabajando en su análisis.


37 / 65

tidyr

  • Estas son sus principales funciones:

    • separate(): separar los caracteres en varias columnas
    • unite(): unir datos de varias columnas en una
    • drop_na(): eliminar líneas con NA
    • replace_na(): reemplazar valores NA
    • pivot_wider(): pasa valores de filas a columnas
    • pivot_longer(): pasa valores de columnas a filas




Para ver todas las funciones del paquete, consulte la cheatsheets: https://github.com/rstudio/cheatsheets/blob/master/data-import.pdf


38 / 65

tidyr

separate()

  • Muchas veces, una sola variable de columna capturará múltiples variables, o incluso partes de una variable que simplemente no le importa.

  • La función separate() separa dos o más variables que están concatenadas en la misma columna.

  • La sintaxis de la función es:
datos %>%
separate(
col = columna_vieja,
into = c("nueva_columna_1", "nueva_columna_2"),
sep = c("_") # cómo se separan las variables en la columna (ej. ".", "_")
)
39 / 65

tidyr

separate()

Por ejemplo, dividamos la columna "localidad" de la tabla "datos_xlsx" en "ciudad" y "provincia".

datos_xlsx %>%
separate(
col = localidad, # la columna vieja
into = c("ciudad", "provincia"), # las nuevas columnas
sep = c(" - ") # modo de separación
)

Antes

ID localidad ano zona var_respuesta temperatura
1 Puerto Iguazú - Misiones 2001 agrícola NA 25.0
2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
3 San Pedro - Misiones 2001 agrícola 5 24.2
4 Tareiri - Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 6 27.0
6 Puerto Liberdad - Misiones 2005 agrícola NA 25.5
7 San Pedro - Misiones 2005 agrícola 7 26.0
8 Tareiri - Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú - Misiones 2001 bosque 30 20.0
10 Puerto Liberdad - Misiones 2001 bosque 52 21.0
11 San Pedro - Misiones 2001 bosque 63 22.0
12 Tareiri - Misiones 2001 bosque 41 25.0
13 Puerto Iguazú - Misiones 2005 bosque 45 23.0
14 Puerto Liberdad - Misiones 2005 bosque 49 21.0
15 San Pedro - Misiones 2005 bosque 56 24.0
16 Tareiri - Misiones 2005 bosque 64 26.0
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
20 Tareiri - Misiones 2001 urbano NA 30.0
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6

Despues

ID ciudad provincia ano zona var_respuesta temperatura
1 Puerto Iguazú Misiones 2001 agrícola NA 25.0
2 Puerto Liberdad Misiones 2001 agrícola 2 26.7
3 San Pedro Misiones 2001 agrícola 5 24.2
4 Tareiri Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú Misiones 2005 agrícola 6 27.0
6 Puerto Liberdad Misiones 2005 agrícola NA 25.5
7 San Pedro Misiones 2005 agrícola 7 26.0
8 Tareiri Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú Misiones 2001 bosque 30 20.0
10 Puerto Liberdad Misiones 2001 bosque 52 21.0
11 San Pedro Misiones 2001 bosque 63 22.0
12 Tareiri Misiones 2001 bosque 41 25.0
13 Puerto Iguazú Misiones 2005 bosque 45 23.0
14 Puerto Liberdad Misiones 2005 bosque 49 21.0
15 San Pedro Misiones 2005 bosque 56 24.0
16 Tareiri Misiones 2005 bosque 64 26.0
17 Puerto Iguazú Misiones 2001 urbano 20 28.0
18 Puerto Liberdad Misiones 2001 urbano 14 29.4
19 San Pedro Misiones 2001 urbano 16 32.4
20 Tareiri Misiones 2001 urbano NA 30.0
21 Puerto Iguazú Misiones 2005 urbano 29 29.0
22 Puerto Liberdad Misiones 2005 urbano 30 32.5
23 San Pedro Misiones 2005 urbano 16 33.0
24 Tareiri Misiones 2005 urbano 18 33.6
40 / 65

tidyr

unite()

  • La operación unite() es lo opuesto a separate().

  • La función unite() une dos variables que están en columnas diferentes.
  • Toma dos columnas (variables) y las convierte en una. Se usa ampliamente para ensamblar informes finales o tablas para análisis visual.

  • La sintaxis de la función es:
datos %>%
unite(
col = nueva_columna, columnas_para_juntar,
sep = c("_") # cómo se separan las variables en la columna (ej. ".", "_")
)
41 / 65

tidyr

unite()

Por ejemplo, unamos las columnas "zona" y "año".

datos_xlsx %>%
unite(
col = "zona_ano", "zona", "ano",
sep = "_"
)

Antes

ID localidad ano zona var_respuesta temperatura
1 Puerto Iguazú - Misiones 2001 agrícola NA 25.0
2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
3 San Pedro - Misiones 2001 agrícola 5 24.2
4 Tareiri - Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 6 27.0
6 Puerto Liberdad - Misiones 2005 agrícola NA 25.5
7 San Pedro - Misiones 2005 agrícola 7 26.0
8 Tareiri - Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú - Misiones 2001 bosque 30 20.0
10 Puerto Liberdad - Misiones 2001 bosque 52 21.0
11 San Pedro - Misiones 2001 bosque 63 22.0
12 Tareiri - Misiones 2001 bosque 41 25.0
13 Puerto Iguazú - Misiones 2005 bosque 45 23.0
14 Puerto Liberdad - Misiones 2005 bosque 49 21.0
15 San Pedro - Misiones 2005 bosque 56 24.0
16 Tareiri - Misiones 2005 bosque 64 26.0
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
20 Tareiri - Misiones 2001 urbano NA 30.0
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6

Despues

ID localidad zona_ano var_respuesta temperatura
1 Puerto Iguazú - Misiones agrícola_2001 NA 25.0
2 Puerto Liberdad - Misiones agrícola_2001 2 26.7
3 San Pedro - Misiones agrícola_2001 5 24.2
4 Tareiri - Misiones agrícola_2001 4 26.2
5 Puerto Iguazú - Misiones agrícola_2005 6 27.0
6 Puerto Liberdad - Misiones agrícola_2005 NA 25.5
7 San Pedro - Misiones agrícola_2005 7 26.0
8 Tareiri - Misiones agrícola_2005 9 26.5
9 Puerto Iguazú - Misiones bosque_2001 30 20.0
10 Puerto Liberdad - Misiones bosque_2001 52 21.0
11 San Pedro - Misiones bosque_2001 63 22.0
12 Tareiri - Misiones bosque_2001 41 25.0
13 Puerto Iguazú - Misiones bosque_2005 45 23.0
14 Puerto Liberdad - Misiones bosque_2005 49 21.0
15 San Pedro - Misiones bosque_2005 56 24.0
16 Tareiri - Misiones bosque_2005 64 26.0
17 Puerto Iguazú - Misiones urbano_2001 20 28.0
18 Puerto Liberdad - Misiones urbano_2001 14 29.4
19 San Pedro - Misiones urbano_2001 16 32.4
20 Tareiri - Misiones urbano_2001 NA 30.0
21 Puerto Iguazú - Misiones urbano_2005 29 29.0
22 Puerto Liberdad - Misiones urbano_2005 30 32.5
23 San Pedro - Misiones urbano_2005 16 33.0
24 Tareiri - Misiones urbano_2005 18 33.6
42 / 65

tidyr

replace_na() y drop_na()

Cuando tenemos datos faltantes en nuestra tabla (NA), podemos reemplazar NA con nuevos valores con la función replace_na(),...

replace_na(
list(columna_X = valor)
)

...o podemos eliminar las filas con valores faltantes con drop_na().

drop_na(
columna
)

43 / 65

tidyr

replace_na()

Por ejemplo, podemos reemplazar las filas con el valor faltante en la columna "var_respuesta" por cero (lineas 1, 6 y 20)...

datos_xlsx %>%
replace_na(list(var_respuesta = 0))

Antes

ID localidad ano zona var_respuesta temperatura
1 Puerto Iguazú - Misiones 2001 agrícola NA 25.0
2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
3 San Pedro - Misiones 2001 agrícola 5 24.2
4 Tareiri - Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 6 27.0
6 Puerto Liberdad - Misiones 2005 agrícola NA 25.5
7 San Pedro - Misiones 2005 agrícola 7 26.0
8 Tareiri - Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú - Misiones 2001 bosque 30 20.0
10 Puerto Liberdad - Misiones 2001 bosque 52 21.0
11 San Pedro - Misiones 2001 bosque 63 22.0
12 Tareiri - Misiones 2001 bosque 41 25.0
13 Puerto Iguazú - Misiones 2005 bosque 45 23.0
14 Puerto Liberdad - Misiones 2005 bosque 49 21.0
15 San Pedro - Misiones 2005 bosque 56 24.0
16 Tareiri - Misiones 2005 bosque 64 26.0
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
20 Tareiri - Misiones 2001 urbano NA 30.0
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6

Después

ID localidad ano zona var_respuesta temperatura
1 Puerto Iguazú - Misiones 2001 agrícola 0 25.0
2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
3 San Pedro - Misiones 2001 agrícola 5 24.2
4 Tareiri - Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 6 27.0
6 Puerto Liberdad - Misiones 2005 agrícola 0 25.5
7 San Pedro - Misiones 2005 agrícola 7 26.0
8 Tareiri - Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú - Misiones 2001 bosque 30 20.0
10 Puerto Liberdad - Misiones 2001 bosque 52 21.0
11 San Pedro - Misiones 2001 bosque 63 22.0
12 Tareiri - Misiones 2001 bosque 41 25.0
13 Puerto Iguazú - Misiones 2005 bosque 45 23.0
14 Puerto Liberdad - Misiones 2005 bosque 49 21.0
15 San Pedro - Misiones 2005 bosque 56 24.0
16 Tareiri - Misiones 2005 bosque 64 26.0
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
20 Tareiri - Misiones 2001 urbano 0 30.0
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6
44 / 65

tidyr

drop_na()

...o podemos eliminar las líneas que tiene valores NA.

datos_xlsx %>%
drop_na(var_respuesta)

Antes

ID localidad ano zona var_respuesta temperatura
1 Puerto Iguazú - Misiones 2001 agrícola NA 25.0
2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
3 San Pedro - Misiones 2001 agrícola 5 24.2
4 Tareiri - Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 6 27.0
6 Puerto Liberdad - Misiones 2005 agrícola NA 25.5
7 San Pedro - Misiones 2005 agrícola 7 26.0
8 Tareiri - Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú - Misiones 2001 bosque 30 20.0
10 Puerto Liberdad - Misiones 2001 bosque 52 21.0
11 San Pedro - Misiones 2001 bosque 63 22.0
12 Tareiri - Misiones 2001 bosque 41 25.0
13 Puerto Iguazú - Misiones 2005 bosque 45 23.0
14 Puerto Liberdad - Misiones 2005 bosque 49 21.0
15 San Pedro - Misiones 2005 bosque 56 24.0
16 Tareiri - Misiones 2005 bosque 64 26.0
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
20 Tareiri - Misiones 2001 urbano NA 30.0
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6

Después

ID localidad ano zona var_respuesta temperatura
2 Puerto Liberdad - Misiones 2001 agrícola 2 26.7
3 San Pedro - Misiones 2001 agrícola 5 24.2
4 Tareiri - Misiones 2001 agrícola 4 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 6 27.0
7 San Pedro - Misiones 2005 agrícola 7 26.0
8 Tareiri - Misiones 2005 agrícola 9 26.5
9 Puerto Iguazú - Misiones 2001 bosque 30 20.0
10 Puerto Liberdad - Misiones 2001 bosque 52 21.0
11 San Pedro - Misiones 2001 bosque 63 22.0
12 Tareiri - Misiones 2001 bosque 41 25.0
13 Puerto Iguazú - Misiones 2005 bosque 45 23.0
14 Puerto Liberdad - Misiones 2005 bosque 49 21.0
15 San Pedro - Misiones 2005 bosque 56 24.0
16 Tareiri - Misiones 2005 bosque 64 26.0
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6
45 / 65

tidyr

pivot_longer()

  • "Alarga" los datos, aumentando el número de filas y disminuyendo el número de columnas.

pivot_longer(
cols = Columnas_para_pivotar,
names_to = "nombre_nova_columna",
values_to = "nombre_col_values"
)

pivot_wider()

  • Pasa los datos de columnas para filas, aumentando el número de columnas.

pivot_wider(
names_from = columna_nombres,
values_from = columna_valores
)
46 / 65

tidyr

pivot_longer()

Por ejemplo, pasemos los años de la tabla "datos_csv" de las columnas a las filas. Los valores los almacenaremos en una columna llamada 'value'.

datos_csv
ID localidad 2001 2002 2003
1 Agricola 10 12 15
2 PNI 20 22 25
3 Urbano 15 12 10
datos_csv %>%
pivot_longer(
cols = c('2001', '2002', '2003'),
names_to = "año",
values_to = "value"
)
ID localidad año value
1 Agricola 2001 10
1 Agricola 2002 12
1 Agricola 2003 15
2 PNI 2001 20
2 PNI 2002 22
2 PNI 2003 25
3 Urbano 2001 15
3 Urbano 2002 12
3 Urbano 2003 10
47 / 65

tidyr

pivot_wider()

¿Qué pasa si quiero revertir la tabla a su formato original?

datos_csv2 %>%
pivot_wider(
names_from = año,
values_from = value
)
ID localidad 2001 2002 2003
1 Agricola 10 12 15
2 PNI 20 22 25
3 Urbano 15 12 10
48 / 65

dplyr

49 / 65

dplyr

El 📦 dplyr es lo paquete más útil para realizar la transformación de datos, combinando simplicidad y eficiencia de una manera elegante.

  • Los scripts R que hacen un uso inteligente de los verbos dplyr y las facilidades del operador pipe tienden a ser más legibles y organizados sin perder velocidad de ejecución.

  • Las principales funciones de dplyr son:

    • select(): seleccionar columnas
    • arrange(): ordenar la base de datos
    • filter(): filtrar las lineas
    • mutate(): crear/modificar columnas
    • group_by(): agrupar la base de datos
    • summarise(): resume la base
    • relocate(): reordenar columnas
    • left_join(), right_join() y full_join(): juntar ≠ bases de datos.
50 / 65

dplyr

select()

  • Usamos para seleccionar columnas.

  • Los argumentos son los nombres de las columnas que desea seleccionar.

datos %>%
select(nombre_col, nombre_col2)
  • Para eliminar columnas de la base, agregue un "menos" (-) antes de la selección.
datos %>%
select(-nombre_col, -nombre_col2)
  • También disponemos de otras funciones auxiliares:
    • starts_with(): para columnas que comienzan con texto estándar
    • ends_with(): para columnas que terminan con texto estándar
    • contiene(): para columnas que contienen texto estándar
51 / 65

dplyr

select()

Seleccionemos las columnas "localidad" y "año" de la tabla "datos_xlsx".

datos_xlsx %>%
select(localidad, ano)
localidad ano
Puerto Iguazú - Misiones 2001
Puerto Liberdad - Misiones 2001
San Pedro - Misiones 2001
Tareiri - Misiones 2001
Puerto Iguazú - Misiones 2005
Puerto Liberdad - Misiones 2005
San Pedro - Misiones 2005
Tareiri - Misiones 2005
Puerto Iguazú - Misiones 2001
Puerto Liberdad - Misiones 2001
San Pedro - Misiones 2001
Tareiri - Misiones 2001
Puerto Iguazú - Misiones 2005
Puerto Liberdad - Misiones 2005
San Pedro - Misiones 2005
Tareiri - Misiones 2005
Puerto Iguazú - Misiones 2001
Puerto Liberdad - Misiones 2001
San Pedro - Misiones 2001
Tareiri - Misiones 2001
Puerto Iguazú - Misiones 2005
Puerto Liberdad - Misiones 2005
San Pedro - Misiones 2005
Tareiri - Misiones 2005
52 / 65

dplyr

select()

Seleccione todos los datos excepto "ID" y "temperatura".

datos_xlsx %>%
select(-ID, -temperatura)
localidad ano zona var_respuesta
Puerto Iguazú - Misiones 2001 agrícola NA
Puerto Liberdad - Misiones 2001 agrícola 2
San Pedro - Misiones 2001 agrícola 5
Tareiri - Misiones 2001 agrícola 4
Puerto Iguazú - Misiones 2005 agrícola 6
Puerto Liberdad - Misiones 2005 agrícola NA
San Pedro - Misiones 2005 agrícola 7
Tareiri - Misiones 2005 agrícola 9
Puerto Iguazú - Misiones 2001 bosque 30
Puerto Liberdad - Misiones 2001 bosque 52
San Pedro - Misiones 2001 bosque 63
Tareiri - Misiones 2001 bosque 41
Puerto Iguazú - Misiones 2005 bosque 45
Puerto Liberdad - Misiones 2005 bosque 49
San Pedro - Misiones 2005 bosque 56
Tareiri - Misiones 2005 bosque 64
Puerto Iguazú - Misiones 2001 urbano 20
Puerto Liberdad - Misiones 2001 urbano 14
San Pedro - Misiones 2001 urbano 16
Tareiri - Misiones 2001 urbano NA
Puerto Iguazú - Misiones 2005 urbano 29
Puerto Liberdad - Misiones 2005 urbano 30
San Pedro - Misiones 2005 urbano 16
Tareiri - Misiones 2005 urbano 18
53 / 65

dplyr

arrange()

  • Para ordenar líneas.

  • Los argumentos son las columnas por las que queremos ordenar las filas.

datos %>%
arrange(columna_x)
  • También podemos ordenar en orden descendente usando la función desc()
datos %>%
arrange(desc(columna_x))
  • ¡Y ordena más de una columna al mismo tiempo!
datos %>%
arrange(columna_y, desc(columna_x))
54 / 65

dplyr

arrange()

  • En el siguiente ejemplo, ordenamos las líneas base en orden ascendente de "response_var".

Antes

datos_xlsx %>%
select(ano, var_respuesta)
ano var_respuesta
2001 NA
2001 2
2001 5
2001 4
2005 6
2005 NA
2005 7
2005 9
2001 30
2001 52
2001 63
2001 41
2005 45
2005 49
2005 56
2005 64
2001 20
2001 14
2001 16
2001 NA
2005 29
2005 30
2005 16
2005 18

Después

datos_xlsx %>%
select(ano, var_respuesta) %>%
arrange(ano, desc(var_respuesta))
ano var_respuesta
2001 63
2001 52
2001 41
2001 30
2001 20
2001 16
2001 14
2001 5
2001 4
2001 2
2001 NA
2001 NA
2005 64
2005 56
2005 49
2005 45
2005 30
2005 29
2005 18
2005 16
2005 9
2005 7
2005 6
2005 NA
55 / 65

dplyr

filter()

  • Para filtrar valores de una columna base, usamos la función filter().
datos %>%
filter(columna < value)
  • Por ejemplo, podemos seleccionar datos con una "var_respuesta" superior a 50.
datos_xlsx %>%
filter(var_respuesta > 50)
ID localidad ano zona var_respuesta temperatura
10 Puerto Liberdad - Misiones 2001 bosque 52 21
11 San Pedro - Misiones 2001 bosque 63 22
15 San Pedro - Misiones 2005 bosque 56 24
16 Tareiri - Misiones 2005 bosque 64 26
56 / 65

dplyr

filter()

  • También podemos usar el filtro con caracteres.
datos_xlsx %>%
filter(zona %in% "urbano")
ID localidad ano zona var_respuesta temperatura
17 Puerto Iguazú - Misiones 2001 urbano 20 28.0
18 Puerto Liberdad - Misiones 2001 urbano 14 29.4
19 San Pedro - Misiones 2001 urbano 16 32.4
20 Tareiri - Misiones 2001 urbano NA 30.0
21 Puerto Iguazú - Misiones 2005 urbano 29 29.0
22 Puerto Liberdad - Misiones 2005 urbano 30 32.5
23 San Pedro - Misiones 2005 urbano 16 33.0
24 Tareiri - Misiones 2005 urbano 18 33.6
57 / 65

dplyr

mutate()

  • Para modificar una columna existente o crear una nueva.

  • Aplicaremos una función.

  • La regla es que el resultado de la operación devuelve un vector con una longitud igual al número de filas en la base.

datos_xlsx %>%
mutate(columna = columna + función)
  • También puede crear/modificar tantas columnas como desee dentro de la misma mutación.
datos_xlsx %>%
mutate(columna = columna+función, nueva_columna = columna/valor)
58 / 65

dplyr

mutate()

  • Por ejemplo, digamos que descubrió un error en su tabla. Agregaste uno individuo más en la columna "var_respuesta" y ahora necesitas quitar ese valor.
datos_xlsx %>%
mutate(var_respuesta = var_respuesta - 1)
ID localidad ano zona var_respuesta temperatura
1 Puerto Iguazú - Misiones 2001 agrícola NA 25.0
2 Puerto Liberdad - Misiones 2001 agrícola 1 26.7
3 San Pedro - Misiones 2001 agrícola 4 24.2
4 Tareiri - Misiones 2001 agrícola 3 26.2
5 Puerto Iguazú - Misiones 2005 agrícola 5 27.0
6 Puerto Liberdad - Misiones 2005 agrícola NA 25.5
7 San Pedro - Misiones 2005 agrícola 6 26.0
8 Tareiri - Misiones 2005 agrícola 8 26.5
9 Puerto Iguazú - Misiones 2001 bosque 29 20.0
10 Puerto Liberdad - Misiones 2001 bosque 51 21.0
11 San Pedro - Misiones 2001 bosque 62 22.0
12 Tareiri - Misiones 2001 bosque 40 25.0
13 Puerto Iguazú - Misiones 2005 bosque 44 23.0
14 Puerto Liberdad - Misiones 2005 bosque 48 21.0
15 San Pedro - Misiones 2005 bosque 55 24.0
16 Tareiri - Misiones 2005 bosque 63 26.0
17 Puerto Iguazú - Misiones 2001 urbano 19 28.0
18 Puerto Liberdad - Misiones 2001 urbano 13 29.4
19 San Pedro - Misiones 2001 urbano 15 32.4
20 Tareiri - Misiones 2001 urbano NA 30.0
21 Puerto Iguazú - Misiones 2005 urbano 28 29.0
22 Puerto Liberdad - Misiones 2005 urbano 29 32.5
23 San Pedro - Misiones 2005 urbano 15 33.0
24 Tareiri - Misiones 2005 urbano 17 33.6
59 / 65

dplyr

summarize()

  • Es la técnica de resumir un conjunto de datos utilizando alguna métrica de interés.

  • Media, mediana, varianza, frecuencia, proporción, por ejemplo, son tipos de resumen que aportan información diferente sobre una variable.

datos %>%
summarize(función(columna))
  • No vamos a explorar esta función aquí, ya que tendremos una clase solo sobre estadística descriptiva en R.
datos_xlsx %>%
summarize(media = mean(temperatura), na.rm = TRUE)
## # A tibble: 1 x 2
## media na.rm
## <dbl> <lgl>
## 1 26.5 TRUE
60 / 65

dplyr

relocate()

  • Para reubicar columnas.

  • De forma predeterminada, coloca una o más columnas al comienzo de la base.

# Coloque las columnas 5 y 4 al principio de la tabla.
datos %>%
relocate(columna5, columna4)
  • Podemos usar los argumentos .after = y .before = para realizar cambios más complejos.
# Poner la columna 2 después de la columna 4
datos %>%
relocate(columna2, .after = columna4)
# Poner la columna 2 antes de la columna 4
datos %>%
relocate(columna2, .before = columna4)
61 / 65

dplyr

rename()

  • Cambia los nombres de variables individuales (columnas) usando la sintaxis nuevo_nombre = viejo_nombre.
datos %>%
rename(columna_x = columna.x)
  • Por ejemplo, vamos cambiar el nombre de la columna "localidad" por "municipalidad".

Antes

datos_xlsx %>%
names()
## [1] "ID" "localidad" "ano" "zona" "var_respuesta"
## [6] "temperatura"

Después

datos_xlsx %>%
rename(municipalidad = localidad) %>%
names()
## [1] "ID" "municipalidad" "ano" "zona" "var_respuesta"
## [6] "temperatura"
62 / 65

dplyr

left_join(), right_join() y full_join()

  • Lo usamos para unir dos tablas en una.
# Une la tabla 'datos' a la tabla 'datos2' por 'columna_x'
# Mantiene los elementos de la tabla 'datos' y excluye elementos adicionales de 'datos2'.
datos %>%
left_join(datos2,
by = "columna_x")
# Mantiene los elementos de la tabla 'datos2' y excluye elementos adicionales de 'datos'.
datos %>%
right_join(datos2,
by = "columna_x")
# Mantiene los valores de las dos tablas.
datos %>%
full_join(datos2, by = "columna_x")
63 / 65

¡¡Fin de clase!!

64 / 65
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
Esc Back to slideshow