Capítulo15 Tibbles

Fecha de la ultima revisión

## [1] "2024-11-07"

El tema proviene de los siguientes sitios.

English: https://r4ds.had.co.nz/tibbles.html

Español: https://es.r4ds.hadley.nz/10-tibble.html


15.1 Temas: El paquete Tibble

  • as_tibble()

15.2 Crear un tibble

  • tibble()

Crear un tibble con la siguiente información. Una columna que tiene los valores del 1 al 8 que se llama “secuencia”, una segunda columna que tiene los siguientes valores 23,26, 24,26,27, 11,20,21 que se llama edad y una tercera columna con la siguiente información, Jose, Maria, Carol, Moncho, Liz, Maria, Jorge, Miguel, que ser llama Nombre

library(tidyverse)
library(datos)

tibble(
  secuencia = c(1:8),
  edad = c(23,26, 24,26,27, 11,20,21),
  nombre = c("Jose", "Maria", "Carol", "Moncho", "Liz", "Maria", "Jorge", "Miguel")
)
## # A tibble: 8 × 3
##   secuencia  edad nombre
##       <int> <dbl> <chr> 
## 1         1    23 Jose  
## 2         2    26 Maria 
## 3         3    24 Carol 
## 4         4    26 Moncho
## 5         5    27 Liz   
## 6         6    11 Maria 
## 7         7    20 Jorge 
## 8         8    21 Miguel

15.3 Crear un tribble

  • tribble()

Haga un tribble con las primera 3 lineas del tibble anterior

tribble(
  ~secuencia, ~edad, ~nombre,
  1, 23, "Jose",
  2, 26, "Maria",
  3, 23, "Carol"
  
  
)
## # A tibble: 3 × 3
##   secuencia  edad nombre
##       <dbl> <dbl> <chr> 
## 1         1    23 Jose  
## 2         2    26 Maria 
## 3         3    23 Carol

15.4 tibble vs. data.frame

tb = tibble(
  a = lubridate::now() + runif(1e2) * 86400,
  b = lubridate::today() + runif(1e2) * 30,
  c = 1:1e2,
  d = runif(1e2),
  e = sample(letters, 1e2, replace = TRUE)
)
tb
## # A tibble: 100 × 5
##    a                   b              c      d e    
##    <dttm>              <date>     <int>  <dbl> <chr>
##  1 2024-11-07 14:26:53 2024-11-25     1 0.559  o    
##  2 2024-11-07 20:56:07 2024-11-07     2 0.250  o    
##  3 2024-11-07 15:49:44 2024-11-09     3 0.0653 d    
##  4 2024-11-08 13:35:58 2024-11-08     4 0.573  v    
##  5 2024-11-07 21:08:13 2024-11-29     5 0.651  k    
##  6 2024-11-08 05:20:03 2024-11-18     6 0.581  p    
##  7 2024-11-08 09:58:08 2024-12-01     7 0.0175 x    
##  8 2024-11-08 08:58:07 2024-11-18     8 0.0133 f    
##  9 2024-11-08 03:12:51 2024-11-21     9 0.661  c    
## 10 2024-11-08 09:21:04 2024-11-30    10 0.380  y    
## # ℹ 90 more rows
tb %>%
  print(n = 4, width = Inf)
## # A tibble: 100 × 5
##   a                   b              c      d e    
##   <dttm>              <date>     <int>  <dbl> <chr>
## 1 2024-11-07 14:26:53 2024-11-25     1 0.559  o    
## 2 2024-11-07 20:56:07 2024-11-07     2 0.250  o    
## 3 2024-11-07 15:49:44 2024-11-09     3 0.0653 d    
## 4 2024-11-08 13:35:58 2024-11-08     4 0.573  v    
## # ℹ 96 more rows
lubridate::now()
## [1] "2024-11-07 13:39:11 AST"
lubridate::today()
## [1] "2024-11-07"
  • To convert a data frame to a tibble use as.tibble

  • To convert a tibble to a data frame use as.data.frame


15.5 Diferencias entre un tibble y un data frame.

  • Tibbles tiene un buen método de impresión que muestra solo las primeras 10 filas y todas las columnas que caben en la pantalla.
  • Tibbles no admite nombres de filas. Se eliminan al convertir a tibble o al crear subconjuntos:

Operaciones aritmeticas en tibbles

A diferencia de los data frame, los tibbles NO admiten operaciones aritméticas en todas las columnas. El resultado  fuerza silenciosamente a un data frame.

tbl <- tibble(a = 1:3, b = 4:6)
result=tbl * 2

is_tibble(result)
## [1] FALSE
result2=tbl |> mutate(c=b*2)

is.tibble(result2)
## [1] TRUE
  • Los tibbles también son más estrictos con $. Tibbles nunca realiza coincidencias parciales y generará una advertencia y devolverá NULL si la columna no existe:
df <- data.frame(abc = 1)
df$a
## [1] 1
#> [1] 1

df2 <- tibble(abc = 1)
df2$a # nota el error
## NULL
  • Para extraer una columna de un tibble, use [[. Esto es más seguro que $ porque nunca realiza coincidencias parciales:

15.6 Selección de subconjuntos de datos

head(vuelos$salida_programada, n=20) 
##  [1] 515 529 540 545 600 558 600 600 600 600 600 600 600 600 600 559 600 600 600
## [20] 600
vuelos[["salida_programada"]] |> head(n=20)
##  [1] 515 529 540 545 600 558 600 600 600 600 600 600 600 600 600 559 600 600 600
## [20] 600
#Alternativas usar esta función dentro de pipe

vuelos %>% .$salida_programada |> head(n=20)
##  [1] 515 529 540 545 600 558 600 600 600 600 600 600 600 600 600 559 600 600 600
## [20] 600
vuelos %>% .[["salida_programada"]] |> head(n=20)
##  [1] 515 529 540 545 600 558 600 600 600 600 600 600 600 600 600 559 600 600 600
## [20] 600
vuelos %>% .[["atraso_salida"]] |> 
  head(n=20)
##  [1]  2  4  2 -1 -6 -4 -5 -3 -3 -2 -2 -2 -2 -2 -1  0 -1  0  0  1
  1. Ejercicios:

Hacer los ejercicios en la sección 10.5 del libro en español