Как использовать rbindlist в R для создания одной таблицы данных из многих


Функцию rbindlist() в R можно использовать для создания одной таблицы данных из списка множества объектов data.table или data.frame.

Эта функция использует следующий базовый синтаксис:

rbindlist(l, use. names ="check", fill= FALSE , idcol= NULL )

куда:

  • l : Список, содержащий объекты data.table, data.frame или списка.
  • use.names : TRUE привязывается по именам столбцов. FALSE связывает по положению.
  • fill : TRUE заполняет отсутствующие значения NA.
  • idcol : создает столбцы, показывающие, из какого элемента списка взяты эти строки.

В следующем примере показано, как использовать эту функцию на практике.

Пример: использование rbindlist для создания одной таблицы данных

Предположим, у нас есть следующий список объектов data.table и data.frame в R:

library (data.table)

#create data frames and data tables
data1 <- data. table (team=c('A', 'B', 'C'),
 points=c(22, 27, 38))

data2 <- data. table (team=c('D', 'E', 'F'),
 points=c(22, 14, 20))

data3 <- data.frame(team=c('G', 'H', 'I'),
 points=c(11, 15, 18))

#view data frames and data tables
print(data1)
print(data2)
print(data3)

 team points
1: A 22
2: B 27
3: C 38
 team points
1: D 22
2: E 14
3: F 20
 team points
1 G 11
2 H 15
3 I 18

Мы можем использовать следующую функцию rbindlist() , чтобы связать вместе список объектов data.table и data.frame в одну data.table:

#define list of objects to bind together
data_list <- list(data1, data2, data3)

#bind together list of objects
big_data <- rbindlist(data_list)

#view result
big_data

 team points
1: A 22
2: B 27
3: C 38
4: D 22
5: E 14
6: F 20
7: G 11
8: H 15
9: I 18

Результатом является объект data.table с девятью строками, состоящими из строк из предоставленного нами списка объектов.

Мы также можем использовать функцию class() , чтобы убедиться, что результат действительно является объектом data.table:

#view class of resulting object
class(big_data)

[1] "data.table" "data.frame"

Мы видим, что результатом действительно является объект data.table.

Преимущество использования rbindlist

Альтернативой использованию rbindlist может быть использование do.call с функцией rbind в базе R:

#use rbind to bind together list of objects
do. call (" rbind", data_list)

 team points
1: A 22
2: B 27
3: C 38
4: D 22
5: E 14
6: F 20
7: G 11
8: H 15
9: I 18

Этот код дает тот же результат, но оказывается, что rbindlist работает значительно быстрее, особенно для очень больших объектов data.table или data.frame.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в R:

Как преобразовать таблицу во фрейм данных в R
Как добавить строки во фрейм данных в R
Как разделить фрейм данных в R