Características principales de un conjunto de datos ordenado:
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.
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.
install.packages("tidyverse")
El creador de Tidyverse es Hadley Wickham y hoy en día muchas personas han contribuido a su expansión.
"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. (...)"
Instale y cargue el paquete Tidyverse en su computadora.
install.packages("tidyverse")library(tidyverse)
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).
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
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.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..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.
.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
.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.
.txt
"delim = " es un carácter único utilizado para separar campos dentro de un registro.
.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
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 .csvwrite.csv2(x = objeto, path = "nombre_tabla.csv")# como un .txtwrite_delim(x = objeto, path = "nombre_tabla.txt", delim = "\t")
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 .csvwrite.csv2(x = datos_csv, path = "nombre_tabla.csv")# como un .txtwrite_delim(x = datos_txt, path = "nombre_tabla.txt", delim = "\t")
¿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.
install.packages("readxl")
library(readxl)
Para abrir nuestro archivo de repositorio (datos.xlsx): read_xlsx("archivo.xlsx")
readxl
transforma archivos de excel en tibbles.
Ejemplo:
datos_xlsx <- read_xlsx("datos.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
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)
data.frame
entibble
:
as_tibble(data)
%>%
)%>%
)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
%>%
) "Más intuitivo hacerlo un poco"
piensas( que( orden( la( en( codar() ) ) ) ) )
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 !!
El objetivo del 📦 tidyr
es ayudarte a crear datos ordenados.
Los datos ordenados son datos donde:
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.
Estas son sus principales funciones:
separate()
: separar los caracteres en varias columnasunite()
: unir datos de varias columnas en unadrop_na()
: eliminar líneas con NAreplace_na()
: reemplazar valores NApivot_wider()
: pasa valores de filas a columnaspivot_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
separate()
separa dos o más variables que están concatenadas en la misma columna.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. ".", "_") )
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 |
unite()
es lo opuesto a separate()
. unite()
une dos variables que están en columnas diferentes.datos %>% unite( col = nueva_columna, columnas_para_juntar, sep = c("_") # cómo se separan las variables en la columna (ej. ".", "_") )
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 |
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)
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 |
...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 |
pivot_longer( cols = Columnas_para_pivotar, names_to = "nombre_nova_columna", values_to = "nombre_col_values" )
pivot_wider( names_from = columna_nombres, values_from = columna_valores )
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 |
¿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 |
El 📦 dplyr
es lo paquete más útil para realizar la transformación de datos, combinando simplicidad y eficiencia de una manera elegante.
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 columnasarrange()
: ordenar la base de datosfilter()
: filtrar las lineasmutate()
: crear/modificar columnasgroup_by()
: agrupar la base de datossummarise()
: resume la baserelocate()
: reordenar columnasleft_join()
, right_join()
y full_join()
: juntar ≠ bases de datos. Usamos para seleccionar columnas.
Los argumentos son los nombres de las columnas que desea seleccionar.
datos %>% select(nombre_col, nombre_col2)
-
) antes de la selección.datos %>% select(-nombre_col, -nombre_col2)
starts_with()
: para columnas que comienzan con texto estándarends_with()
: para columnas que terminan con texto estándarcontiene()
: para columnas que contienen texto estándarSeleccionemos 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 |
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 |
Para ordenar líneas.
Los argumentos son las columnas por las que queremos ordenar las filas.
datos %>% arrange(columna_x)
desc()
datos %>% arrange(desc(columna_x))
datos %>% arrange(columna_y, desc(columna_x))
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 |
filter()
.datos %>% filter(columna < value)
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 |
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 |
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)
datos_xlsx %>% mutate(columna = columna+función, nueva_columna = columna/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 |
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))
datos_xlsx %>% summarize(media = mean(temperatura), na.rm = TRUE)
## # A tibble: 1 x 2## media na.rm## <dbl> <lgl>## 1 26.5 TRUE
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)
.after =
y .before =
para realizar cambios más complejos.# Poner la columna 2 después de la columna 4datos %>% relocate(columna2, .after = columna4)
# Poner la columna 2 antes de la columna 4datos %>% relocate(columna2, .before = columna4)
nuevo_nombre = viejo_nombre
.datos %>% rename(columna_x = columna.x)
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"
# 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")
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 |