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")
).