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
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"
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"
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
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"
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"
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"
Data frame
library(tibble)
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
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
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>
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",
)