tibble

Author

データサイエンス関連基礎調査WG

Published

August 1, 2025

パッケージの概要

tibbleは、従来のdata.frameを洗練させたデータ構造tibbleを作成することのできるパッケージです。また、このパッケージは、Rでモダンな分析環境を構築するためのパッケージ群である「tidyberse」に含まれています。

suppressMessages(require(tidyverse))
require(tibble)
require(microbenchmark)
Loading required package: microbenchmark
Warning: package 'microbenchmark' was built under R version 4.5.1

tibbleの作成方法

as_tibble関数を利用することで、listや、data.frameをtibbleに変換することができます。

class(iris)
[1] "data.frame"
as_tibble(iris)
# A tibble: 150 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# ℹ 140 more rows

また、tibble関数を用いると、個々のベクトルをまとめて、tibbleを作成することができます。

tibble(x = 1:3, y = 1)
# A tibble: 3 × 2
      x     y
  <int> <dbl>
1     1     1
2     2     1
3     3     1

data.frameとの違い①:表示

あるデータをConsoleに表示する場合、tibbleはデフォルトでデータの表示数を制限し、Consoleがデータで埋め尽くされるのを防いでくれます。また、データの型がカラム名の下に表示されます。

例えば、irisには150個のデータが含まれており、data.frameのまま表示すると、150個のデータが表示されます。一方、tibbleとして表示すると、Consoleに表示されるデータの数は10個だけです。 (表示される数は、オプションで変更することが可能です)

as_tibble(iris)
# A tibble: 150 × 5
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
          <dbl>       <dbl>        <dbl>       <dbl> <fct>  
 1          5.1         3.5          1.4         0.2 setosa 
 2          4.9         3            1.4         0.2 setosa 
 3          4.7         3.2          1.3         0.2 setosa 
 4          4.6         3.1          1.5         0.2 setosa 
 5          5           3.6          1.4         0.2 setosa 
 6          5.4         3.9          1.7         0.4 setosa 
 7          4.6         3.4          1.4         0.3 setosa 
 8          5           3.4          1.5         0.2 setosa 
 9          4.4         2.9          1.4         0.2 setosa 
10          4.9         3.1          1.5         0.1 setosa 
# ℹ 140 more rows
#head関数を利用すれば、data.frameでも表示数をコントロール可能
head(iris, n=10)
   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1           5.1         3.5          1.4         0.2  setosa
2           4.9         3.0          1.4         0.2  setosa
3           4.7         3.2          1.3         0.2  setosa
4           4.6         3.1          1.5         0.2  setosa
5           5.0         3.6          1.4         0.2  setosa
6           5.4         3.9          1.7         0.4  setosa
7           4.6         3.4          1.4         0.3  setosa
8           5.0         3.4          1.5         0.2  setosa
9           4.4         2.9          1.4         0.2  setosa
10          4.9         3.1          1.5         0.1  setosa

data.frameとの違い②:列名の変換有無

ベクトルからdata.frameを作成する場合、自動で列名が変換されてしまうケースがあるが、tibbleを作成する場合、デフォルトの設定では列名が自動変換されません。 また、name_repairsをuniversalと指定すると、列名が変換されるようになります。

tibble(`a + b` = 1:5)
# A tibble: 5 × 1
  `a + b`
    <int>
1       1
2       2
3       3
4       4
5       5
data.frame(`a + b` = 1:5)
  a...b
1     1
2     2
3     3
4     4
5     5
tibble(`a 1` = 1, `a 2` = 2, .name_repair = "universal")
New names:
• `a 1` -> `a.1`
• `a 2` -> `a.2`
# A tibble: 1 × 2
    a.1   a.2
  <dbl> <dbl>
1     1     2

data.frameとの違い③:サブセット操作の厳密さ

特定の列を指定して、データを表示する場合、tibbleでは厳密に列名を指定する必要があります。 また、data.frameはサブセットを指定する条件次第で、データフレームではなく、ベクトルを返すこともありますが、tibbleは常にtibbleを返します。

df <- data.frame(one = 1, two = "a", three = "v")
df2 <- tibble(df)

df$o
[1] 1
df2$o
Warning: Unknown or uninitialised column: `o`.
NULL
df[, c("one", "two")]
  one two
1   1   a
df2[, c("one", "two")]
# A tibble: 1 × 2
    one two  
  <dbl> <chr>
1     1 a    
df[, "one"]
[1] 1
df2[, "one"]
# A tibble: 1 × 1
    one
  <dbl>
1     1

data.frameとの違い④:パフォーマンス

as.tibble()は、as.data.frame()よりも高速です

X <- list(1:10000, 1:10000, 1:10000)
names(X) <- c("test1", "test2", "test3")
microbenchmark(
  as_tibble(X),
  as.data.frame(X)
)
Unit: microseconds
             expr   min    lq    mean median    uq   max neval
     as_tibble(X)  78.9  85.8 100.425  90.85  94.5 368.8   100
 as.data.frame(X) 150.5 158.9 172.055 164.75 170.6 307.0   100