Skip to content

Latest commit

 

History

History
705 lines (560 loc) · 27.6 KB

File metadata and controls

705 lines (560 loc) · 27.6 KB

md(“Transformación de datos”)

Macarena Valenzuela Beltrán 8 de julio

Transformación de datos El paquete dplyr tiene 5 funciones para transformar los datos * filter() -> filtra las observaciones a partir de valores concretos * arrange()-> reordena las filas

  • select() -> selecciona las vasriables con sus respectivos nombres

  • mutate() -> crear nuevas variables a partir de las existentes

  • sumarise()-> colapsa valores seleccionados para dar un resumen de los mismos (media, rango, la mediana, la sd)

  • group_by -> opera la función a la que acompaña grupo a grupo llamamos la librería de tidyverse y vemos sus subpaquetes

library(tidyverse)
## -- Attaching packages ------------------ tidyverse 1.3.0 --

## v ggplot2 3.3.2     v purrr   0.3.4
## v tibble  3.0.2     v dplyr   1.0.0
## v tidyr   1.0.0     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0

## -- Conflicts --------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

llamamos la librería de la base de datos que vamos a ocupar

library(nycflights13)

seleccionamos la base de datos flights desde la gran base de datos nycflights13

nycflights13::flights
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

para saber que es lo que contiene la base de datos flights

?flights
## starting httpd help server ... done

para ver la base de datos completa

view(flights)

Comencemos a hacer transformación de datos ** Función filter()** Veamos todos los vuelos que salieton el 1° de enero

filter(flights, month==1, day==1)
## # A tibble: 842 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 832 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
vuelosenero <- filter(flights, month==1, day==1)

vuelosenero
## # A tibble: 842 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 832 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
view(vuelosenero)

para saber los vuelos en mi cumpleaños

vuelos28dic <- filter(flights, month == 12, day == 28) 

vuelos28dic
## # A tibble: 814 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013    12    28        7           2359         8      433            445
##  2  2013    12    28       56           2245       131      345            127
##  3  2013    12    28      507            500         7      638            651
##  4  2013    12    28      508            515        -7      755            814
##  5  2013    12    28      539            540        -1      830            850
##  6  2013    12    28      539            545        -6      821            845
##  7  2013    12    28      547            600       -13      636            658
##  8  2013    12    28      551            550         1     1031           1027
##  9  2013    12    28      553            600        -7      737            745
## 10  2013    12    28      553            600        -7      809            835
## # ... with 804 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
view(vuelos28dic)

¿En qué día salen mas vuelos: el 1° de enero o el 25 de diciembre?

filter(flights, month == 12, day == 25)
## # A tibble: 719 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013    12    25      456            500        -4      649            651
##  2  2013    12    25      524            515         9      805            814
##  3  2013    12    25      542            540         2      832            850
##  4  2013    12    25      546            550        -4     1022           1027
##  5  2013    12    25      556            600        -4      730            745
##  6  2013    12    25      557            600        -3      743            752
##  7  2013    12    25      557            600        -3      818            831
##  8  2013    12    25      559            600        -1      855            856
##  9  2013    12    25      559            600        -1      849            855
## 10  2013    12    25      600            600         0      850            846
## # ... with 709 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
filter(flights, month==1, day==1)
## # A tibble: 842 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 832 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

Manejo de los datos no disponibles NA (Not Available) Los NA son contagiosos: cualquier operación que involucre un resultado NA dará como resultado NA

10 == NA
## [1] NA
NA >0
## [1] NA
NA + 5
## [1] NA
NA / 5
## [1] NA

Si tengo una base y quiero sacar el promedio y entre

los datos se encuentra aunque sea un solo NA, el resultado

promedio será NA la tía María tiene edad desconocida

edad.maría<- NA

al tío Pedro no lo veo hace mucho años, por tanto no sé cuantos años tiene ahora

edad.pedro<- NA

edad.maría==edad.pedro
## [1] NA

Para controlar el contagio de los NA usamos la función is.na()

is.na(edad.maría)
## [1] TRUE
df<-tibble(x= c(1,2, NA, 4, 5))

df
## # A tibble: 5 x 1
##       x
##   <dbl>
## 1     1
## 2     2
## 3    NA
## 4     4
## 5     5

filtramos la base de datoa df para saber cuales son los calores mayores a 2

filter(df, x>2)
## # A tibble: 2 x 1
##       x
##   <dbl>
## 1     4
## 2     5

los datos NA pueden aparecer en forma explícita y en forma implícita

roi<-tibble(
  year=c(rep(2016, 4), rep(2017, 4), 2018),
  quarter=c(rep(c(1,2,3,4), 2), 1),
  return=rnorm(9, mean = 0.5, sd= 1)
)

roi$return[7]
## [1] -0.171631
roi %>% 
  spread(year, return)
## # A tibble: 4 x 4
##   quarter `2016` `2017` `2018`
##     <dbl>  <dbl>  <dbl>  <dbl>
## 1       1  0.129  0.638  0.297
## 2       2 -0.530  0.398 NA    
## 3       3  0.358 -0.172 NA    
## 4       4  0.929  1.78  NA

para solucionar ocupamos la función na.rm() función arrange() para ver las primeras variables y las primeras filas

head(flights)
## # A tibble: 6 x 19
##    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
## 1  2013     1     1      517            515         2      830            819
## 2  2013     1     1      533            529         4      850            830
## 3  2013     1     1      542            540         2      923            850
## 4  2013     1     1      544            545        -1     1004           1022
## 5  2013     1     1      554            600        -6      812            837
## 6  2013     1     1      554            558        -4      740            728
## # ... with 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

para ver las primeras 15 filas

head(flights, 15)
## # A tibble: 15 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## 11  2013     1     1      558            600        -2      849            851
## 12  2013     1     1      558            600        -2      853            856
## 13  2013     1     1      558            600        -2      924            917
## 14  2013     1     1      558            600        -2      923            937
## 15  2013     1     1      559            600        -1      941            910
## # ... with 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

para ver las últimas filas de la base de datos

tail(flights, 10)
## # A tibble: 10 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     9    30     2240           2250       -10     2347              7
##  2  2013     9    30     2241           2246        -5     2345              1
##  3  2013     9    30     2307           2255        12     2359           2358
##  4  2013     9    30     2349           2359       -10      325            350
##  5  2013     9    30       NA           1842        NA       NA           2019
##  6  2013     9    30       NA           1455        NA       NA           1634
##  7  2013     9    30       NA           2200        NA       NA           2312
##  8  2013     9    30       NA           1210        NA       NA           1330
##  9  2013     9    30       NA           1159        NA       NA           1344
## 10  2013     9    30       NA            840        NA       NA           1020
## # ... with 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

para ordenar la base de datos por año

arrange(flights, year)
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

para ordenar por año, mes y por día

arrange(flights, year, month, day)
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
salida_dato<-arrange(flights, year, month, day)

salida_dato
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
tail(salida_dato)
## # A tibble: 6 x 19
##    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
## 1  2013    12    31       NA            855        NA       NA           1142
## 2  2013    12    31       NA            705        NA       NA            931
## 3  2013    12    31       NA            825        NA       NA           1029
## 4  2013    12    31       NA           1615        NA       NA           1800
## 5  2013    12    31       NA            600        NA       NA            735
## 6  2013    12    31       NA            830        NA       NA           1154
## # ... with 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

ordenar de mayor a menor utilizamos la función desc()

arrange(flights, desc(arr_delay))
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     9      641            900      1301     1242           1530
##  2  2013     6    15     1432           1935      1137     1607           2120
##  3  2013     1    10     1121           1635      1126     1239           1810
##  4  2013     9    20     1139           1845      1014     1457           2210
##  5  2013     7    22      845           1600      1005     1044           1815
##  6  2013     4    10     1100           1900       960     1342           2211
##  7  2013     3    17     2321            810       911      135           1020
##  8  2013     7    22     2257            759       898      121           1026
##  9  2013    12     5      756           1700       896     1058           2020
## 10  2013     5     3     1133           2055       878     1250           2215
## # ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

ordenar los primeros datos en forma descendente

head(arrange(flights, desc(arr_delay)))
## # A tibble: 6 x 19
##    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
## 1  2013     1     9      641            900      1301     1242           1530
## 2  2013     6    15     1432           1935      1137     1607           2120
## 3  2013     1    10     1121           1635      1126     1239           1810
## 4  2013     9    20     1139           1845      1014     1457           2210
## 5  2013     7    22      845           1600      1005     1044           1815
## 6  2013     4    10     1100           1900       960     1342           2211
## # ... with 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>

para hacer un view de los carrier

view(arrange(flights, carrier))

cuáles son los vuelos que recorrieron menos

view(arrange(flights, distance))

para observar las distancia de los vuelos recorridos en orden

view(arrange(flights, desc(distance)))

función select() programación básica seleccionar solo fila 1

view(salida_dato[1,])

seleccionemos de la base de datos desde las filas 1 a la 3 y todas las columnas

view(salida_dato[1:3, ])

view(salida_dato [1024:1068, ])

de las filas anteriores solo seleccionamos las variable dep_delay y arr_delay

view(select(salida_dato [1024:1068,], dep_delay, arr_time))

seleccionando los nombres de las variables

view(select(flights, year, month, day))

desde y hasta

view(select(flights, dep_time:arr_delay))

solo queremos seleccionar todas las variables menos 2 en específico

view(select(flights, -(year:day)))

seleccionamos todas las variables que comiencen con la dep

view(select(flights, starts_with("dep")))

seleccionar todas las variables que terminen con delay

view(select(flights, ends_with("delay")))

seleccionar todas las variables que contengan una s

view(select(flights, contains("s")))

Función mutate

La función mutate nos permite transformar las variables para obtener una varable distinta que sea de nuestro interés Llamamos a la base de dato

library(nycflights13)

seleccionamos solo la base de datos flights

nycflights13::flights
## # A tibble: 336,776 x 19
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ... with 336,766 more rows, and 11 more variables: arr_delay <dbl>,
## #   carrier <chr>, flight <int>, tailnum <chr>, origin <chr>, dest <chr>,
## #   air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

para ver la base de datos completa

view(flights)

Para ver la ganancia de tiempo

flights_nueva <- select(flights, year:day, ends_with("delay"), distance, air_time)

view(flights_nueva)

fights_nueva <- mutate(flights_nueva, tiempo_gan = arr_delay - dep_delay,
       air_time_hour = air_time/60,
       flight_speed = distance/air_time_hour,
       tiempo_gan_por_hora = tiempo_gan/air_time_hour)

view(flights_nueva)

función () summarise y group_by

summarise(flights, delay = mean(dep_delay, na.rm = TRUE))
## # A tibble: 1 x 1
##   delay
##   <dbl>
## 1  12.6
by_month_group <- group_by(flights, year, month)

summarise(by_month_group, delay = mean(dep_delay, na.rm = T))
## `summarise()` regrouping output by 'year' (override with `.groups` argument)

## # A tibble: 12 x 3
## # Groups:   year [1]
##     year month delay
##    <int> <int> <dbl>
##  1  2013     1 10.0 
##  2  2013     2 10.8 
##  3  2013     3 13.2 
##  4  2013     4 13.9 
##  5  2013     5 13.0 
##  6  2013     6 20.8 
##  7  2013     7 21.7 
##  8  2013     8 12.6 
##  9  2013     9  6.72
## 10  2013    10  6.24
## 11  2013    11  5.44
## 12  2013    12 16.6

veamos esta misma funcióno pero con un grupo por día

by_day_group <- group_by(flights, year, month, day) 

summarise(by_day_group, delay = mean(dep_delay, na.rm = T))
## `summarise()` regrouping output by 'year', 'month' (override with `.groups` argument)

## # A tibble: 365 x 4
## # Groups:   year, month [12]
##     year month   day delay
##    <int> <int> <int> <dbl>
##  1  2013     1     1 11.5 
##  2  2013     1     2 13.9 
##  3  2013     1     3 11.0 
##  4  2013     1     4  8.95
##  5  2013     1     5  5.73
##  6  2013     1     6  7.15
##  7  2013     1     7  5.42
##  8  2013     1     8  2.55
##  9  2013     1     9  2.28
## 10  2013     1    10  2.84
## # ... with 355 more rows