Tibble

R
tibble
tidyverse
Обзор основного функционала пакета tibble
Published

February 9, 2023

О tibble

Класс tbl_df является подклассом data.frame, созданным для того, чтобы иметь другое поведение по умолчанию. Разговорный термин “tibble” относится к фрейму данных, который имеет класс tbl_df.

У класса tbl_df следующие зависимости:

  • атрибуты класса: c(“tbl_df”, “tbl”, “data.frame”)

  • базовый элемент - вектор, где каждый вектор имеет одину и ту же длинну vctrs::vec_size()

  • атрибут names, представляющий собой вектор символов той же длины, что и базовый список

  • атрибут row.names, включенный для совместимости с data.frame. К этому атрибуту обращаются только для запроса количества строк, любые имена строк, которые могут там храниться, игнорируются большинством методов tibble.

Поведение объектов класса tbl_df

  • символьные вектора не приводятся принудительно к типу факторов
  • имена столбцов не изменяются
  • Переработка происходит только для векторов длиной 1, т.к. расширение векторов длинной более 1 элемента к длинне других векторов фрейма часто приводит к ошибкам vctrs::vec_recycle()
  • Имена столбцов не заполняются, хотя отсутствующие имена заполняются автоматически. Пустые и дублирующиеся имена столбцов категорически не рекомендуются, но пользователь должен указать, как их разрешить. Подробнее читайте в vctrs::vec_as_names()
  • Имена строк не добавляются и настоятельно не рекомендуются в пользу сохранения этой информации в виде столбца. Читайте об этом в именах строк
  • df[, j] возвращает tibble; он не извлекает автоматически столбец внутри. значение по умолчанию - df[, j, drop = FALSE]. Подробнее читайте в разделе подмножество

Создание tibble

Аргументы:

  • .rows - количество строк
  • .name_repair - проверка имен столбцов
    • minimal - без проверки, кроме самого наличия имени столбца
    • unique - имя должно быть уникальное и не пустое
    • check_unique - имя должно быть уникальное
    • universal - делает имена уникальными и синтетическими

tibble

Определение

Метод создающий фрейм данных

Использование

tibble(..., .rows = NULL, .name_repair = c("check_unique", "unique", "universal", "minimal"))

a <- 1:5
tibble(a, a * 2, a, .name_repair = "universal")
New names:
• `a` -> `a...1`
• `a * 2` -> `a...2`
• `a` -> `a...3`
# A tibble: 5 × 3
  a...1 a...2 a...3
  <int> <dbl> <int>
1     1     2     1
2     2     4     2
3     3     6     3
4     4     8     4
5     5    10     5

tibble_row

Определение

Метод создающий фрейм данных содержащий только одну строку. Векторные столбцы должны иметь длинну в один элемент, не векторные приводятся к типу список

Использование

tibble_row(..., .name_repair = c("check_unique", "unique", "universal", "minimal") )

tibble_row(a = 1, lm = lm(Height ~ Girth + Volume, data = trees))
# A tibble: 1 × 2
      a lm    
  <dbl> <list>
1     1 <lm>  

tribble

Определение

Метод для создания фрейма данных строка за строкой, т.е. задать вручную данные для небольшого набора, где важна удобочитаемость примера.

tribble(
  ~colA, ~colB,
  "a",   1,
  "b",   2,
  "c",   3
)
# A tibble: 3 × 2
  colA   colB
  <chr> <dbl>
1 a         1
2 b         2
3 c         3
tribble(
  ~a, ~b, ~c,
  1, "2000-01-01", "1.5"
) %>%
  dplyr::mutate(
    dplyr::across(a, as.integer),
    dplyr::across(b, as.Date)
  )
# A tibble: 1 × 3
      a b          c    
  <int> <date>     <chr>
1     1 2000-01-01 1.5  

new_tibble

Определение

Метод создающий фрейм данных, оптимизированный по производительности, проверки сведены к минимуму. Реализован на основе метода new_data_frame() из пакета vctrs

Использование

new_tibble(x, ..., nrow = NULL, class = NULL, subclass = NULL)

new_tibble(list(a = 1:3, b = 4:6), nrow = 3)
# A tibble: 3 × 2
      a     b
  <int> <int>
1     1     4
2     2     5
3     3     6

Создание матрицы

frame_matrix

Определение

Метод для создания небольших матриц, например ковариационных, где важна наглядность с расположением данных по строкам

Использование

frame_matrix(...)

frame_matrix(
  ~col1, ~col2,
  1,     3,
  5,     2
)
     col1 col2
[1,]    1    3
[2,]    5    2

Отображение tibble

print

Определение

Выводит на печать фрейм данных

Атрибуты метода:

  • x - объект, который нужно отформатировать или напечатать
  • width - ширина выводимого текста фрейма
  • n - количество отображаемых строк
  • max_extra_cols - количество дополнительных столбцов для печати сокращенной информации, если ширина слишком мала для всего текста
  • max_footer_lines - максимальное количество строк нижнего колонтитула. Если значение равно NULL, используется параметр max_footer_lines.

Использование

print(x, width = NULL, ..., n = NULL, max_extra_cols = NULL, max_footer_lines = NULL)

print(as_tibble(mtcars), n = 1, width = 50)
# A tibble: 32 × 11
    mpg   cyl  disp    hp  drat    wt  qsec    vs
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1    21     6   160   110   3.9  2.62  16.5     0
# … with 31 more rows, and 3 more variables:
#   am <dbl>, gear <dbl>, carb <dbl>
print(as_tibble(mtcars), n = 3, width = 50)
# A tibble: 32 × 11
    mpg   cyl  disp    hp  drat    wt  qsec    vs
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  21       6   160   110  3.9   2.62  16.5     0
2  21       6   160   110  3.9   2.88  17.0     0
3  22.8     4   108    93  3.85  2.32  18.6     1
# … with 29 more rows, and 3 more variables:
#   am <dbl>, gear <dbl>, carb <dbl>

view

Определение

Выводит отображение фрейма данных в отдельное окно. Опять же не так актуально при работе с данными в блокноте.

view(as_tibble(mtcars), title = 'Date frame', n = 10)

Обработка векторов

num

Определение

Создает числовой вектор, которорый можно отформатировать

Атрибуты метода:

  • x - числовой вектор
  • sigfig - задает количество значащих цифр, не комбинируется с digits
  • digits - количество отображаемых цифр после десятичных знаков, не комбинируется с sigfig
  • label - метка столбца вместо отображения типа
  • scale - множитель применяемый перед отображением
  • notation - нотация отображения
    • fit - десятичная нотация, используется если поле содержит 13 и меньше цифр
    • dec - десятичная нотация, не зависящая от ширины
    • sci - научная нотация
    • eng - инженерная нотация (научная нотация использующая показатели равные трем)
    • si - система SI (поддерживаются префиксы между 1e-24 и 1e24)
  • fixed_exponent - задает показатель степени для всех чисел в научной, инженерной системе счисления или системе SI
  • extra_sigfig -

Использование

df <- tibble(
  x   = num(9:11 * 100 + 0.5, label = "базовый"),
  x0  = num(9:11 * 100 + 0.5, digits = 0,       label = "dig 0"),
  x1  = num(9:11 * 100 + 0.5, digits = -1,      label = "dig -1"),
  x2  = num(9:11 * 100 + 0.5, digits = -2,      label = "dig -2"),
  x3  = num(9:11 * 100 + 0.5, digits = 2,       label = "dig 2"),
  x4  = num(9:11 * 100 + 0.5, sigfig = 3,       label = "sig 3"),
  x5  = num(9:11 * 100 + 0.5, sigfig = 4,       label = "sig 4"),
  x6  = num(9:11 * 100 + 0.5, sigfig = 5,       label = "sig 5"),
  x7  = num(9:11 * 100 + 0.5, scale = 10,       label = "scale 10"),
  x8  = num(9:11 * 100 + 0.5, scale = 100,      label = "scale 100"),
  x9  = num(9:11 * 100 + 0.5, scale = 0.1,      label = "scale 0.1"),
  x10 = num(9:11 * 100 + 0.5, notation = "sci", label = "sci"),
  x11 = num(9:11 * 100 + 0.5, notation = "eng", label = "eng"),
  x12 = num(9:11 * 100 + 0.5, notation = "si",  label = "si"),
  x13 = num(9:11 * 100 + 0.5, notation = "dec", label = "dec"),
) 

print(df, width = 200)
# A tibble: 3 × 15
        x    x0     x1     x2      x3    x4     x5     x6       x7        x8
  базовый dig 0 dig -1 dig -2   dig 2 sig 3  sig 4  sig 5 scale 10 scale 100
1    900.  900.  900.5  900.5  900.50  900.  900.5  900.5     9005     90050
2   1000. 1000. 1000.5 1000.5 1000.50 1000. 1000.  1000.5    10005    100050
3   1100. 1100. 1100.5 1100.5 1100.50 1100. 1100.  1100.5    11005    110050
         x9    x10      x11     x12   x13
  scale 0.1    sci      eng      si   dec
1      90.1 9.01e2 900.  e0 900.     900.
2     100.  1.00e3   1.00e3   1.00k 1000.
3     110.  1.10e3   1.10e3   1.10k 1100.
tibble(
  scismall = num(10^(-7:6) * 123, notation = "sci", fixed_exponent = -3),
  scilarge = num(10^(-7:6) * 123, notation = "sci", fixed_exponent = 3),
  scimax   = num(10^(-7:6) * 123, notation = "sci", fixed_exponent = Inf)
)
# A tibble: 14 × 3
            scismall          scilarge            scimax
               [e-3]              [e3]              [e8]
 1            0.0123      0.0000000123 0.000000000000123
 2            0.123       0.000000123  0.00000000000123 
 3            1.23        0.00000123   0.0000000000123  
 4           12.3         0.0000123    0.000000000123   
 5          123           0.000123     0.00000000123    
 6         1230           0.00123      0.0000000123     
 7        12300           0.0123       0.000000123      
 8       123000           0.123        0.00000123       
 9      1230000           1.23         0.0000123        
10     12300000          12.3          0.000123         
11    123000000         123            0.00123          
12   1230000000        1230            0.0123           
13  12300000000       12300            0.123            
14 123000000000      123000            1.23             
tibble(
  default = num(100 + 1:3 * 0.001),
  extra1 = num(100 + 1:3 * 0.001, extra_sigfig = TRUE),
  extra2 = num(100 + 1:3 * 0.0001, extra_sigfig = TRUE),
  extra3 = num(10000 + 1:3 * 0.00001, extra_sigfig = TRUE)
)
# A tibble: 3 × 4
  default  extra1   extra2      extra3
    <num>   <num>    <num>       <num>
1    100. 100.001 100.0001 10000.00001
2    100. 100.002 100.0002 10000.00002
3    100. 100.003 100.0003 10000.00003

char

Определение

Создает вектор символов, который может быть отформатирован с заданной минимальной шириной или без ограничений по ширине, и в котором можно настроить стиль аббревиатуры.

Атрибуты метода:

  • x - символьный вектор
  • min_chars - Минимальная ширина, выделяемая для этого столбца, по умолчанию равна 15
  • shorten - задает сокращение и его стиль
    • back - добавляет многоточие в конце (по умолчанию)
    • front - добавляет многоточие спереди
    • mid - добавляет многоточие по середине
    • abbreviate - использование аббревиатуры

Использование

char(x, ..., min_chars = NULL,shorten = c("back", "front", "mid", "abbreviate"))

lipsum <- unlist(strsplit(stringi::stri_rand_lipsum(1), "(?<=[.]) +", perl = TRUE))
tibble(
  x = char(lipsum, min_chars = 15),
  x0 = char(lipsum, min_chars = 10),
  x1 = char(lipsum, min_chars = 10, shorten = 'back'),
  x2 = char(lipsum, min_chars = 10, shorten = 'front'),
  x3 = char(lipsum, min_chars = 10, shorten = 'mid'),
  x4 = char(lipsum, min_chars = 10, shorten = 'abbreviate')
)
# A tibble: 12 × 6
   x                      x0         x1         x2         x3         x4        
   <char>                 <char>     <char>     <char>     <char>     <char>    
 1 Lorem ipsum dolor sit… Lorem ips… Lorem ips… … integer. Lore…eger. Lidsapsps…
 2 Nec proin volutpat.    Nec proin… Nec proin… …volutpat. Nec …tpat. Ncprvltpt.
 3 Elementum non nisi se… Elementum… Elementum… …c sed ac. Elem…d ac. Ennselvfn…
 4 Mollis justo ut sed a… Mollis ju… Mollis ju… …habitant. Moll…tant. Mjusanahb.
 5 Ultricies felis adipi… Ultricies… Ultricies… … a at ex. Ultr…t ex. Ufadp,aae.
 6 Orci neque sagittis c… Orci nequ… Orci nequ… …d sapien. Orci…pien. Onscv,apss
 7 Torquent quis malesua… Torquent … Torquent … … quis ac. Torq…s ac. Tqmanaqac.
 8 Bibendum in in vitae.  Bibendum … Bibendum … …in vitae. Bibe…itae. Bbndmiivt.
 9 Erat eget et nisi, no… Erat eget… Erat eget… …e, etiam. Erat…tiam. Eeen,ncv,e
10 Eu eleifend tellus to… Eu eleife… Eu eleife… …m libero. Eu e…bero. Eettpammbl
11 Et etiam feugiat cum … Et etiam … Et etiam … … cum est. Et e… est. Etetfcest.
12 Sem auctor augue moll… Sem aucto… Sem aucto… …e mollis. Sem …llis. Smacamlls.

lst

Определение

Создает список с последовательным определением компонентов и автоматической генерацией отсутствующих имен. При определении компонента можно ссылаться на компоненты, созданные ранее в вызове

Использование

lst(...)

tibble(
  lst(1:3, z = letters[4:6], runif(3))
)
# A tibble: 3 × 1
  `lst(1:3, z = letters[4:6], runif(3))`
  <named list>                          
1 <int [3]>                             
2 <chr [3]>                             
3 <dbl [3]>                             

enframe

Определение

преобразует именованные атомарные векторы или списки в фреймы данных с одним или двумя столбцами. Для списка результатом будет вложенный tibble со столбцом типа list. Для безымянных векторов в качестве столбца name используется естественная последовательность.

Атрибуты метода:

  • x - вектор
  • name, value - имена столбцов, в которых хранятся имена и значения

Использование

enframe(x, name = "name", value = "value")

enframe(1:3)
# A tibble: 3 × 2
   name value
  <int> <int>
1     1     1
2     2     2
3     3     3
enframe(c(a = 5, b = 7))
# A tibble: 2 × 2
  name  value
  <chr> <dbl>
1 a         5
2 b         7
enframe(list(one = 1, two = 2:3, three = 4:6))
# A tibble: 3 × 2
  name  value    
  <chr> <list>   
1 one   <dbl [1]>
2 two   <int [2]>
3 three <int [3]>

deframe

Определение

преобразует фреймы данных из двух столбцов в именованный вектор или список, используя первый столбец в качестве имени, а второй - в качестве значения. Если входные данные содержат только один столбец, возвращается безымянный вектор.

Атрибуты метода:

  • x - фрейм данных с одним или двумя столбцами

Использование

deframe(x)

deframe(enframe(3:1))
1 2 3 
3 2 1 
deframe(tibble(a = 1:3))
[1] 1 2 3
deframe(tibble(a = as.list(1:3)))
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

Проверки

is_tibble

Определение

Проверяет относится ли объект к tibbles или его подклассу

Использование

is_tibble(x)

x <- tibble(a = 1:3)
is_tibble(x)
[1] TRUE
y <- data.frame(a = 1:3)
is_tibble(y)
[1] FALSE

validate_tibble

Определение

Выполняет проверки требований к Tibble, таких как:

  • длину столбцов и соответствие vectors::vec_size() данным

  • столбцы являютс векторами\фреймами или матрицами

  • наличие “минимальных” имен

Использование

validate_tibble(x)

try(validate_tibble(new_tibble(trees, nrow = 3)))
Error : Tibble columns must have compatible sizes.
• Size 3: Requested with `nrow` argument.
• Size 31: Columns `Girth`, `Height`, and `Volume`.
ℹ Only values of size one are recycled.

Манипуляция данными

add_row

Определение

Добавляет новую строку во фрейм данных

Атрибуты метода:

.before, .after - индекс строки куда нужно добавить новую строку, по умолчанию добавляет в конец

Использование

add_row(.data, ..., .before = NULL, .after = NULL)

df <- tibble(x = 1:3, y = 3:1)
df
# A tibble: 3 × 2
      x     y
  <int> <int>
1     1     3
2     2     2
3     3     1
df %>% 
  add_row(x = 4, y = 0)
# A tibble: 4 × 2
      x     y
  <dbl> <dbl>
1     1     3
2     2     2
3     3     1
4     4     0
df %>% 
  add_row(x = 4, y = 0, .before = 2)
# A tibble: 4 × 2
      x     y
  <dbl> <dbl>
1     1     3
2     4     0
3     2     2
4     3     1
df %>% 
  add_row(x = 4:5, y = 0:-1)
# A tibble: 5 × 2
      x     y
  <int> <int>
1     1     3
2     2     2
3     3     1
4     4     0
5     5    -1
df %>% 
  add_row(tibble_row(x = 4, y = 0))
# A tibble: 4 × 2
      x     y
  <dbl> <dbl>
1     1     3
2     2     2
3     3     1
4     4     0

add_column

Определение

Добавляет один или несколько столбцов во фрейм данных

Атрибуты метода:

  • .before, .after - индекс или имя столбца докоторого нужно добавлять новый столбец
  • .name_repair - проверка имен столбцов, типы проверок аналогичны используемым при создании tibble

Использование

add_column(.data,...,.before = NULL,.after = NULL,.name_repair = c("check_unique", "unique", "universal", "minimal"))

df <- tibble(x = 1:3, y = 3:1)
df
# A tibble: 3 × 2
      x     y
  <int> <int>
1     1     3
2     2     2
3     3     1
df %>% 
  add_column(z = -1:1, w = 0)
# A tibble: 3 × 4
      x     y     z     w
  <int> <int> <int> <dbl>
1     1     3    -1     0
2     2     2     0     0
3     3     1     1     0
df %>% 
  add_column(z = -1:1, .before = "y")
# A tibble: 3 × 3
      x     z     y
  <int> <int> <int>
1     1    -1     3
2     2     0     2
3     3     1     1

Приведение типов

as_tibble

Определение

Приводит фрейм данных или матрицу к объекту tibble с классом tbl_df

Использование

```{r}
as_tibble(
  x,
  ...,
  .rows = NULL,
  .name_repair = c("check_unique", "unique", "universal", "minimal"),
  rownames = pkgconfig::get_config("tibble::rownames", NULL)
)
```
m <- matrix(rnorm(50), ncol = 5)
colnames(m) <- c("a", "b", "c", "d", "e")
df <- as_tibble(m)
df
# A tibble: 10 × 5
        a       b      c       d      e
    <dbl>   <dbl>  <dbl>   <dbl>  <dbl>
 1 -0.531 -1.02    0.490  0.160   0.338
 2  0.718 -0.604   0.120 -1.64    0.544
 3 -1.46   0.626   0.813 -0.811  -0.409
 4 -0.449 -1.36    1.48   1.59   -0.186
 5  0.262  0.473   1.28   0.508   1.13 
 6 -1.27   0.898   0.918 -0.714   0.466
 7 -0.826 -0.263  -1.02   0.503   1.07 
 8 -0.508 -0.0754  0.249  0.926  -0.929
 9 -1.23   1.12   -1.07   2.74    1.47 
10  0.575  0.901   2.14  -0.0107 -1.46 

as_tibble_row

Определение

Преобразует вектор в tibble с одной строкой. Если ввод представляет собой список, все элементы должны иметь один размер

Использование`

as_tibble_row(x, .name_repair = c("check_unique", "unique", "universal", "minimal"))

as_tibble_row(c(a = 1, b = 2))
# A tibble: 1 × 2
      a     b
  <dbl> <dbl>
1     1     2
as_tibble_row(list(c = "three", d = list(4:5)))
# A tibble: 1 × 2
  c     d        
  <chr> <list>   
1 three <int [2]>
as_tibble_row(1:3, .name_repair = "unique")
New names:
• `` -> `...1`
• `` -> `...2`
• `` -> `...3`
# A tibble: 1 × 3
   ...1  ...2  ...3
  <int> <int> <int>
1     1     2     3

as_tibble_col

Определение

Преобразует вектор в tibble с одним столбцом

Использование

as_tibble_col(x, column_name = "value")

as_tibble_col(1:3)
# A tibble: 3 × 1
  value
  <int>
1     1
2     2
3     3
as_tibble_col(
  list(c = "three", d = list(4:5)),
  column_name = "data"
)
# A tibble: 2 × 1
  data        
  <named list>
1 <chr [1]>   
2 <list [1]>  

Обработка имен строк

Рассмотрим обработку имен строк на примере фрейма данных mtcars

mtcars
# A tibble: 32 × 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

has_rownames

Определение

Проверяет есть ли во фрейме имена строк

Использование

has_rownames(.data)

has_rownames(mtcars)
[1] TRUE
has_rownames(trees)
[1] FALSE

remove_rownames

Определение

Удаляет имена строк из фрейма данных

Использование

remove_rownames(.data)

remove_rownames(mtcars) %>% 
  has_rownames()
[1] FALSE

rownames_to_column

Определение

Преобразует имена строк в столбец

Использование

rownames_to_column(.data, var = "rowname")

mtcars
# A tibble: 32 × 11
     mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1  21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3  22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6  18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7  14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8  24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9  22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10  19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows
mtcars_tbl <- rownames_to_column(mtcars, var = "car") %>% 
  as_tibble()

mtcars_tbl
# A tibble: 32 × 12
   car           mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <chr>       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda RX4    21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2 Mazda RX4 …  21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3 Datsun 710   22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4 Hornet 4 D…  21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5 Hornet Spo…  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6 Valiant      18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7 Duster 360   14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8 Merc 240D    24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9 Merc 230     22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10 Merc 280     19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# … with 22 more rows

column_to_rownames

Определение

Преобразует столбец в имена строк

Использование

column_to_rownames(.data, var = "rowname")

column_to_rownames(mtcars_tbl, var = "car") %>% head()
# A tibble: 6 × 11
    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  21       6   160   110  3.9   2.62  16.5     0     1     4     4
2  21       6   160   110  3.9   2.88  17.0     0     1     4     4
3  22.8     4   108    93  3.85  2.32  18.6     1     1     4     1
4  21.4     6   258   110  3.08  3.22  19.4     1     0     3     1
5  18.7     8   360   175  3.15  3.44  17.0     0     0     3     2
6  18.1     6   225   105  2.76  3.46  20.2     1     0     3     1

rowid_to_column

Определение

Добавляет столбец с идентификатором и удаляет все имена строк

Использование

rowid_to_column(.data, var = "rowid")

rowid_to_column(trees) %>% 
  head()
# A tibble: 6 × 4
  rowid Girth Height Volume
  <int> <dbl>  <dbl>  <dbl>
1     1   8.3     70   10.3
2     2   8.6     65   10.3
3     3   8.8     63   10.2
4     4  10.5     72   16.4
5     5  10.7     81   18.8
6     6  10.8     83   19.7

Производительность

Выполним простой тест производительности объекта tibble и data.frame

# пакет для замера производительности
#| column-page-inset-left

l <- replicate(26, sample(100), simplify = FALSE)
names(l) <- letters

timing <- bench::mark(
  as_tibble(l),
  as.data.frame(l),
  tibble(l),
  new_tibble(l),
  check = FALSE
)

print(timing )
# A tibble: 4 × 13
  expression            min  median itr/s…¹ mem_al…² gc/se…³ n_itr  n_gc total…⁴
  <bch:expr>       <bch:tm> <bch:t>   <dbl> <bch:by>   <dbl> <int> <dbl> <bch:t>
1 as_tibble(l)      143.2µs   152µs   6146.    7.6KB   16.9   2904     8   472ms
2 as.data.frame(l)  761.4µs   819µs   1176.  31.51KB   15.2    541     7   460ms
3 tibble(l)           267µs   349µs   2090.   1.63KB    8.36  1000     4   478ms
4 new_tibble(l)       7.3µs     9µs  82156.     256B   16.4   9998     2   122ms
# … with 4 more variables: result <list>, memory <list>, time <list>,
#   gc <list>, and abbreviated variable names ¹​`itr/sec`, ²​mem_alloc,
#   ³​`gc/sec`, ⁴​total_time

Расшифровка результатов:

  • expression - анализируемое выражение
  • min - минимальное время выполнения
  • median - медиана времени выполнения
  • itr/sec - расчетное количество выполнений в секунду
  • mem_alloc - общий объем памяти, выделенный R при выполнении выражения
  • gc/sec - количество сборок мусора в секунду
  • n_itr - общее количество итераций после фильтрации сборок мусора
  • n_gc - общее количество сборок мусора, выполненных за все итерации
  • total_time - общее время выполнения тестов
  • result - список объектов, возвращенных оцениваемым выражением
  • memory - список с результатами Rprofmem()
  • time - список векторов Bench_time для каждого оцениваемого выражения
  • gc - список с таблицами, содержащими уровень сборки мусора (0-2, столбцы) для каждой итерации (строки).

Поддерживаемые типы данных

Class Data type Example Column header
Atomic logical TRUE lgl
- integer 1L int
- double 1.5 dbl
- character “A” chr
- complex 0+1i cpl
- raw as.raw(1) raw
- list list(1) list
- named list list(a = 1) named list
Built-in objects factor factor(“A”) fct
- ordered ordered(“a”) ord
- Date Sys.Date() date
- POSIXt Sys.time() dttm
- difftime vctrs::new_duration(1) drtn
Objects from other packages hms hms::hms(1) time
- integer64 bit64::as.integer64(1e+10) int64
- blob blob::blob(raw(1)) blob
Data frames data.frame data.frame(a = 1) df[,1]
- tbl_df tibble(a = 1) tibble[,1]
Unchanged AsIs I(1L) I
vctrs types unspecified vctrs::unspecified(1) ???
- vctrs_list_of vctrs::list_of(c(1L)) list
- vctrs_vctr vctrs::new_vctr(1L) vctrs_vc
- vctrs_partial_factor vctrs::partial_factor(letters) prtl_fctr
- vctrs_partial_frame vctrs::partial_frame(a = 1) prtl
Language objects function function() NULL fn
- symbol quote(a) sym
- expression parse(text = “a <- 1<- 2”) expression
- quosures rlang::quos(a = 1) quos

Citation

BibTeX citation:
@online{practicesit2023,
  author = {Best Practices IT},
  title = {Tibble},
  date = {2023-02-09},
  langid = {en}
}
For attribution, please cite this work as:
Best Practices IT. 2023. “Tibble.” February 9, 2023.