3.8 Tibble
Kromě data.frame
existuje v ještě několik typů datasetů. Později budete potřebovat ještě typ tibble
, do kterého převádí datasety balíky dplyr a tidyr. Tento typ datasetu má některé velmi příjemné vlastnosti. Detailní popis této třídy najdete zde: https://blog.rstudio.org/2016/03/24/tibble-1-0-0/ a ve vinětě k balíku tibble.
Dataset tibble
vytvoříte pomocí funkce tibble()
nebo data_frame()
(jedná se o synonyma):
library(tibble)
ds <- tibble(x = 1:1e6, y = 2 * x, zed = x / 3 + 1.5 * y - 7)
ds
## # A tibble: 1,000,000 x 3
## x y zed
## <int> <dbl> <dbl>
## 1 1 2 -3.6666667
## 2 2 4 -0.3333333
## 3 3 6 3.0000000
## 4 4 8 6.3333333
## 5 5 10 9.6666667
## 6 6 12 13.0000000
## 7 7 14 16.3333333
## 8 8 16 19.6666667
## 9 9 18 23.0000000
## 10 10 20 26.3333333
## # ... with 999,990 more rows
Ke konverzi jiných tříd na tibble
slouží funkce as_tibble()
a as_data_frame()
.
Vytvoření tibble
se od vytvoření data.frame
v několika ohledech liší: tibble
- nepřevádí řetězce na faktory
- nemění “nepovolená” jména sloupců na povolená nahrazením divných znaků tečkami
- vyhodnocuje své argumenty postupně, takže můžete později zadaný argument použít při tvorbě dříve zadaného argumentu (jako v příkladu výše)
- nepoužívá jména řádků (která jsou ostatně nebezpečná k uchovávání dat)
- převod na
tibble
pomocías_tibble()
je rychlejší než převod nadata.frame
pomocías.data.frame()
Liší se také tisk tibble
od tisku data.frame
: oproti data.frame
zobrazí tibble
navíc rozměr datasetu a typ jednotlivých proměnných. Naopak vypíše jen prvních deset řádků a jen takový počet sloupců, které se vejdou na obrazovku. Počet vypsaných řádků je možné ovlivnit bud ve funkci print()
, nebo v options()
, viz viněta:
print(ds, n = 5)
## # A tibble: 1,000,000 x 3
## x y zed
## <int> <dbl> <dbl>
## 1 1 2 -3.6666667
## 2 2 4 -0.3333333
## 3 3 6 3.0000000
## 4 4 8 6.3333333
## 5 5 10 9.6666667
## # ... with 1e+06 more rows
Liší se také subsetování. tibble
nikdy nezahazuje zbytečné rozměry a ani je nepřidává. To znamená, že []
vždy vrací tibble
, zatímco [[]]
a $
vždy vrací vektor. Navíc tibble
nikdy nepodporuje partial matching:
ds <- ds[1:6, ] # omezíme ds na prvních 6 řádků
ds[, 1]
## # A tibble: 6 x 1
## x
## <int>
## 1 1
## 2 2
## 3 3
## 4 4
## 5 5
## 6 6
ds[[1]]
## [1] 1 2 3 4 5 6
ds$z
## Warning: Unknown or uninitialised column: 'z'.
## NULL
Někdy se nehodí pracovat s tibble
(např. proto, že některé funkce očekávají jiný výsledek subsetování). V takovém případě můžete tibble
převést na data.frame
pomocí konverzní funkce as.data.frame()
:
as.data.frame(ds)
## x y zed
## 1 1 2 -3.6666667
## 2 2 4 -0.3333333
## 3 3 6 3.0000000
## 4 4 8 6.3333333
## 5 5 10 9.6666667
## 6 6 12 13.0000000