LISTAS

Función list() Las listas son objetos especiales, porque nos permiten almacenar cualquier tipo de información. Para crear una, usamos la función list(). Se pueden inspecionar sus elementos de la misma manera que con cualquier otro vector. Lista es un objeto nuevo. Son objetos y tinen diferentes tipos de vectors

mi_vector_1 <- c(1L, "Hola mundo", 3.14159, TRUE)
mi_lista_1 <- list(1L, "Hola mundo", 3.14159, TRUE)
mi_lista_1
## [[1]]
## [1] 1
## 
## [[2]]
## [1] "Hola mundo"
## 
## [[3]]
## [1] 3.14159
## 
## [[4]]
## [1] TRUE

Elementos con nombre

Del mismo modo que podíamos combinar vectores atómicos con otros vectores atómicos, en las listas podemos agregar vectores creados previamente. En este caso, cada uno de ellos conserva su singularidad. Al crear la lista, podemos asignarle un nombre a cada elemento.

vec_integer <- 1:10
vec_logical <- c(TRUE, FALSE, TRUE, FALSE)
vec_double <- vec_integer*10
vec_character <- as.character(vec_double)
mi_lista_2 <- list(enteros = vec_integer,
                   logicos = vec_logical,
                   decimales = vec_double,
                   texto = vec_character)
mi_lista_2
## $enteros
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## $logicos
## [1]  TRUE FALSE  TRUE FALSE
## 
## $decimales
##  [1]  10  20  30  40  50  60  70  80  90 100
## 
## $texto
##  [1] "10"  "20"  "30"  "40"  "50"  "60"  "70"  "80"  "90"  "100"

Combinar lista

Para combinar una lista con otra, basta con incluirlas dentro de una lista nueva. En el código de abajo, se creará una lista con dos elementos, cada uno de ellos sigue siendo una lista.

mi_lista_combinada <- list(mi_lista_1, mi_lista_2)
mi_lista_combinada 
## [[1]]
## [[1]][[1]]
## [1] 1
## 
## [[1]][[2]]
## [1] "Hola mundo"
## 
## [[1]][[3]]
## [1] 3.14159
## 
## [[1]][[4]]
## [1] TRUE
## 
## 
## [[2]]
## [[2]]$enteros
##  [1]  1  2  3  4  5  6  7  8  9 10
## 
## [[2]]$logicos
## [1]  TRUE FALSE  TRUE FALSE
## 
## [[2]]$decimales
##  [1]  10  20  30  40  50  60  70  80  90 100
## 
## [[2]]$texto
##  [1] "10"  "20"  "30"  "40"  "50"  "60"  "70"  "80"  "90"  "100"

DATA FRAME

Versión bidimensional. Los DF los presentan de manera tabular

df <- data.frame(
  columna1 = 1:5,
  columna2 = c("uno", "dos", "tres", "cuatro", "cinco"),
  columna3 = c("one", "two", "three", "four", "five")
  )
df
##   columna1 columna2 columna3
## 1        1      uno      one
## 2        2      dos      two
## 3        3     tres    three
## 4        4   cuatro     four
## 5        5    cinco     five

Obtener un data.frame a partir de una lista

notas <- list(
  matematica = c(20, 15, 17, 19),
  lenguaje = c(18, 12, 11, 19),
  ciencias = c(19, 14, 15, 17)
)
notas
## $matematica
## [1] 20 15 17 19
## 
## $lenguaje
## [1] 18 12 11 19
## 
## $ciencias
## [1] 19 14 15 17
df_notas <- as.data.frame(notas)
df_notas
##   matematica lenguaje ciencias
## 1         20       18       19
## 2         15       12       14
## 3         17       11       15
## 4         19       19       17
class(df_notas)
## [1] "data.frame"

Obtener un data.frame a partir de vectores

Al igual que con una lista, puedo obtener los elementos (columnas) de mi data.frame a partir de vectores creados previamente. En este caso, la columna heredará el nombre del objeto a partir del cual es creado.

alumnos <- c("Amanda", "Brenda", "Charlie", "Dario")
sexo <- c("F", "F", "M", "M")
alumnos
## [1] "Amanda"  "Brenda"  "Charlie" "Dario"
sexo
## [1] "F" "F" "M" "M"

Creando mi primer data.frame

 mi_primer_dataframe <- list(
  nombre = c("Keiko", "Mario", "Pedro", "Pepe"),
  apellido = c("Fujimori", "Vargas Llosa", "Castillo", "Mujica"),
  cargo = c("candidata", "escritor", "candidato", "expresidente")
)
mi_primer_dataframe
## $nombre
## [1] "Keiko" "Mario" "Pedro" "Pepe" 
## 
## $apellido
## [1] "Fujimori"     "Vargas Llosa" "Castillo"     "Mujica"      
## 
## $cargo
## [1] "candidata"    "escritor"     "candidato"    "expresidente"
df_mi_primer_dataframe <- as.data.frame(mi_primer_dataframe)
df_mi_primer_dataframe
##   nombre     apellido        cargo
## 1  Keiko     Fujimori    candidata
## 2  Mario Vargas Llosa     escritor
## 3  Pedro     Castillo    candidato
## 4   Pepe       Mujica expresidente
class(df_mi_primer_dataframe)
## [1] "data.frame"

Tibbles

Data frame

library(tibble)

Crear un tibble a partir de un data.frame

Convertir un data.frame existente en un tibble es bastante sencillo. Basta con colocar nuestro data.frame dentro de as_tibble()[^1].

tbl_notas <- as_tibble(df_notas)
tbl_notas
## # A tibble: 4 x 3
##   matematica lenguaje ciencias
##        <dbl>    <dbl>    <dbl>
## 1         20       18       19
## 2         15       12       14
## 3         17       11       15
## 4         19       19       17

Tibbles a partir de notas

notas
## $matematica
## [1] 20 15 17 19
## 
## $lenguaje
## [1] 18 12 11 19
## 
## $ciencias
## [1] 19 14 15 17
as_tibble(notas)
## # A tibble: 4 x 3
##   matematica lenguaje ciencias
##        <dbl>    <dbl>    <dbl>
## 1         20       18       19
## 2         15       12       14
## 3         17       11       15
## 4         19       19       17

Crear tibbles desde cero

tibble(
  enteros = 1:10,
  decimales = enteros/2 
)
## # A tibble: 10 x 2
##    enteros decimales
##      <int>     <dbl>
##  1       1       0.5
##  2       2       1  
##  3       3       1.5
##  4       4       2  
##  5       5       2.5
##  6       6       3  
##  7       7       3.5
##  8       8       4  
##  9       9       4.5
## 10      10       5
tribble(
  ~colA, ~colB,
  "a",   1,
  "b",   2,
  "c",   3
)
## # A tibble: 3 x 2
##   colA   colB
##   <chr> <dbl>
## 1 a         1
## 2 b         2
## 3 c         3

La clase tibble

class(tbl_notas)
## [1] "tbl_df"     "tbl"        "data.frame"
alfabeto <- letters
alfabeto
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s"
## [20] "t" "u" "v" "w" "x" "y" "z"
tbl_alfabeto <- as_tibble(alfabeto)
tbl_alfabeto
## # A tibble: 26 x 1
##    value
##    <chr>
##  1 a    
##  2 b    
##  3 c    
##  4 d    
##  5 e    
##  6 f    
##  7 g    
##  8 h    
##  9 i    
## 10 j    
## # … with 16 more rows
library(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>

Crea tu propio tibble

tribble(
  ~actor, ~papel,
  "Leonardo DiCarprio",   "Rick Dalton",
  "Brad Pitt",   "Cliff Booth",
  "Margot Robbie",   "Sharon Tate",
  "Emile Hirsch",     "Jay Sebring",
)
## # A tibble: 4 x 2
##   actor              papel      
##   <chr>              <chr>      
## 1 Leonardo DiCarprio Rick Dalton
## 2 Brad Pitt          Cliff Booth
## 3 Margot Robbie      Sharon Tate
## 4 Emile Hirsch       Jay Sebring
tabla <- tribble(
  ~actor, ~papel,
  "Leonardo DiCarprio",   "Rick Dalton",
  "Brad Pitt",   "Cliff Booth",
  "Margot Robbie",   "Sharon Tate",
  "Emile Hirsch",     "Jay Sebring",
)