9.2 tibble: um data frame aperfeiçoado

Data frames são a unidade fundamental de armazenamento de dados retangulares no R. O pacote tibble estende a classe data frame da base do com aperfeiçoamentos relacionados a impressão de dados (mais amigável e versátil), a seleção de dados e a manipulação de dados do tipo factor. O novo objeto é chamado de tibble e sua classe de tbl_df.

9.2.1 Funcionalidades do tibble

Para ilustrar algumas vantagens do tibble, vamos usar o data frame prec_anual. A criação destes dados como tibble é feita com a função de mesmo nome do pacote: tibble::tibble().

prec_anual_tbl <- tibble(
  site = c(
    "A001", "A001", "A002", "A002", "A002", "A003", "A803", "A803"
  ),
  ano = c(2000:2001, 2000:2002, 2004, 2005, 2006),
  prec = c(1800, 1400, 1750, 1470, 1630, 1300, 1950, 1100)
)

O exemplo acima é ilustrativo, pois um data frame pode ser convertido em um tibble simplesmente com a função tibble::as_tibble():

prec_anual_tbl <- as_tibble(prec_anual)
prec_anual_tbl
#> # A tibble: 8 x 3
#>   site    ano  prec
#>   <fct> <dbl> <dbl>
#> 1 A001   2000  1800
#> 2 A001   2001  1400
#> 3 A002   2000  1750
#> 4 A002   2001  1470
#> 5 A002   2002  1630
#> 6 A003   2004  1300
#> 7 A803   2005  1950
#> 8 A803   2006  1100

Com o tibble acima, as principais diferenças entre um tibble e um data frame podem ser enfatizadas.

  • quando impresso no console do R, o tibble já mostra a classe de cada variável.

  • vetores caracteres não são interpretados como factors em um tibble, em contraste a base::data.frame() que faz a coerção para factor e não conserva o nome das variáveis. Este comportamento padrão pode causar problemas aos usuários desavisados em análises posteriores.

str(data.frame("temp. do ar" = "18"))
#> 'data.frame':    1 obs. of  1 variable:
#>  $ temp..do.ar: Factor w/ 1 level "18": 1
  • permite usar seus próprios argumentos prévios para definir variáveis durante a criação do tibble; veja o exemplo abaixo, onde a int prec(intensidade da precipitação) é baseada na razão da precipitação (prec) pelo número de dias no ano.
prec_anual_tbl <- tibble(
  site = c(
    "A001", "A001", "A002", "A002", "A002", "A003", "A803", "A803"
  ),
  ano = c(2000:2001, 2000:2002, 2004, 2005, 2006),
  prec = c(1800, 1400, 1750, 1470, 1630, 1300, 1950, 1100),
  "int prec" = prec / 365.25
)
prec_anual_tbl
#> # A tibble: 8 x 4
#>   site    ano  prec `int prec`
#>   <chr> <dbl> <dbl>      <dbl>
#> 1 A001   2000  1800       4.93
#> 2 A001   2001  1400       3.83
#> 3 A002   2000  1750       4.79
#> 4 A002   2001  1470       4.02
#> 5 A002   2002  1630       4.46
#> 6 A003   2004  1300       3.56
#> 7 A803   2005  1950       5.34
#> 8 A803   2006  1100       3.01
  • nunca adiciona nomes às linhas (row.names)
# nomes das linhas de um data frame são carregados adiante
subset(prec_anual, ano == 2001)
#>   site  ano prec
#> 2 A001 2001 1400
#> 4 A002 2001 1470
# tibble não possui nome de linhas (rownames)
subset(prec_anual_tbl, ano == 2001)
#> # A tibble: 2 x 4
#>   site    ano  prec `int prec`
#>   <chr> <dbl> <dbl>      <dbl>
#> 1 A001   2001  1400       3.83
#> 2 A002   2001  1470       4.02
  • a impressão de um tibble mostra as dez primeiras linhas e a quantidade de colunas mostradas é ajustada ao tamanho da janela do console.

As opções de controle default da impressão de tibbles no console pode ser configuradas através da função de opções de configuração global do R:

m <- 15
n <- 3
options(
  tibble.print_max = m,
  tibble.print_min = n
)

Com a configuração acima, será impresso no console do R n = 3 linhas do tibble se ele tiver mais de m = 15 linhas.

nrow(clima_rs) > 15
#> [1] TRUE
# coersão do data.frame clima_rs para tibble
clima_rs_tbl <- as_tibble(clima_rs)

Para restaurar as opções default use:

options(
  tibble.print_max = NULL,
  tibble.print_min = NULL
)
clima_rs_tbl
#> # A tibble: 23 x 5
#>    codigo estacao             uf     prec  tmax
#>  * <chr>  <chr>               <chr> <dbl> <dbl>
#>  1 83931  Alegrete            RS    1492.  25.4
#>  2 83980  Bagé                RS    1300.  24.1
#>  3 83941  Bento Gonçalves     RS    1684.  23  
#>  4 83919  Bom Jesus           RS    1807.  20.3
#>  5 83963  Cachoeira do Sul    RS    1477.  25.1
#>  6 83942  Caxias do Sul       RS    1823   21.8
#>  7 83912  Cruz Alta           RS    1631.  24.5
#>  8 83964  Encruzilhada do Sul RS    1511.  22.5
#>  9 83915  Guaporé             RS    1759.  24.7
#> 10 83881  Iraí                RS    1807.  27.1
#> # ... with 13 more rows

Uma alternativa útil para inspecionar mais detalhadamente os dados é a função tibble::glimpse().

glimpse(clima_rs)
#> Observations: 23
#> Variables: 5
#> $ codigo  <chr> "83931", "83980", "83941", "83919", "83963", "83942", ...
#> $ estacao <chr> "Alegrete", "Bagé", "Bento Gonçalves", "Bom Jesus", "C...
#> $ uf      <chr> "RS", "RS", "RS", "RS", "RS", "RS", "RS", "RS", "RS", ...
#> $ prec    <dbl> 1492.2, 1299.9, 1683.7, 1807.3, 1477.1, 1823.0, 1630.7...
#> $ tmax    <dbl> 25.4, 24.1, 23.0, 20.3, 25.1, 21.8, 24.5, 22.5, 24.7, ...

Lembre-se também, da função utils::View() para visualizar os dados no RStudio.

View(clima_rs)

Outros aspectos diferencias do tibble podem consultados na vinheta do referido pacote (vignette("tibble")).