[tibble](https://tibble.tidyverse.org/) は、[[データフレーム]] (tibble、別名 `tbl_df`) を提供する [[tidyverse]] のコアパッケージである。[[Base R]] の `data.frame` を再設計し、文字列を `factor` に自動変換しない・列名を変えない・行名を持たないなど、想定外の挙動を減らす設計に統一されている。
[[Hadley Wickham]] らによって開発され、tidyverse の中核データ構造として採用された。print 表示の整理、部分集合化の挙動の現代化、列ごとの型を簡潔な記号で表示する出力など、データ分析でよく起きるつまずきを減らす方向で機能が揃えられている。
## 作成関数
[`tibble::tibble()`](https://tibble.tidyverse.org/reference/tibble.html) と [`tibble::tribble()`](https://tibble.tidyverse.org/reference/tribble.html) の 2 つの作成関数があり、書き方の方向 (列 vs 行) で使い分ける。
### 列指向で作成する
`tibble::tibble()` に列名と値ベクトルのペアを引数として渡し、列を縦に積み上げて tibble を作成する。
```r
tibble(
x = 1:3,
y = c("a", "b", "c"),
z = 0
)
```
```
# A tibble: 3 × 3
x y z
<int> <chr> <dbl>
1 1 a 0
2 2 b 0
3 3 c 0
```
同一の `tibble::tibble()` 呼び出し内では、先に定義した列を後続の列の計算に使える。これは `dplyr::mutate()` と同じ評価順で、段階的な計算をその場で書き下せる。
```r
tibble(
x = 1:3,
y = x * 2
)
```
```
# A tibble: 3 × 2
x y
<int> <dbl>
1 1 2
2 2 4
3 3 6
```
### 行指向で作成する
`tibble::tribble()` で [[R]] の formula 記法の `~` を借用して `~列名 ` の形で列ヘッダを書き、その後に値をカンマ区切りで行単位に並べる。コード上の見た目と出力結果の行の並びが一致するため、テストデータや例示データを書くときに読み手の負担を減らせる。
```r
tribble(
~x, ~y, ~z,
1, "a", TRUE,
2, "b", FALSE,
3, "c", TRUE
)
```
```
# A tibble: 3 × 3
x y z
<dbl> <chr> <lgl>
1 1 a TRUE
2 2 b FALSE
3 3 c TRUE
```
列の型は各列の値から自動推論される。列名にバッククオートを使えば、` 日本語列名 ` のような非構文的名前も渡せる。
```r
tribble(
~`名前`, ~`年齢`,
"佐藤", 30,
"鈴木", 25
)
```
```
# A tibble: 2 × 2
名前 年齢
<chr> <dbl>
1 佐藤 30
2 鈴木 25
```
## 関連ノート
- **[深掘り]** [[tibble の型表示と R のデータ型の対応関係を理解する]]: 作成した tibble を出力したときに見える列ごとの型表示の読み方
- **[深掘り]** [[tibble の print 表示の見切れを width で回避する]]: 列が省略される挙動と、`options(width = 10000)` でコンソール幅自体を広げる回避策