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("Usagi", "Rei", "Ami", "Makoto", "Minako"),
apellido = c("Tsukino", "Hino", "Mizuno", "Kino", "Aino"),
identidad = c("Sailor Moon", "Sailor Mars", "Sailor Mercury", "Sailor Jupiter", "Sailor Venus")
)
mi_primer_dataframe
## $nombre
## [1] "Usagi" "Rei" "Ami" "Makoto" "Minako"
##
## $apellido
## [1] "Tsukino" "Hino" "Mizuno" "Kino" "Aino"
##
## $identidad
## [1] "Sailor Moon" "Sailor Mars" "Sailor Mercury" "Sailor Jupiter"
## [5] "Sailor Venus"
df_mi_primer_dataframe <- as.data.frame(mi_primer_dataframe)
df_mi_primer_dataframe
## nombre apellido identidad
## 1 Usagi Tsukino Sailor Moon
## 2 Rei Hino Sailor Mars
## 3 Ami Mizuno Sailor Mercury
## 4 Makoto Kino Sailor Jupiter
## 5 Minako Aino Sailor Venus
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
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",
)