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

#r #list #split #data.table #data-manipulation

#r #Список #разделить #data.table #манипулирование данными

Вопрос:

пример с требуемым результатом (достигается жестким кодированием)

 DT <- data.table(val=1:8, f=c('a','b','b','a','b','a','a','c'))  
required <- list(DT[f=='a'], DT[f=='b'], DT[f=='c'])
  

Комментарии:

1. Есть split метод для data.tables. split(DT, by='f') должен это сделать.

2. @RuiBarradas и наоборот rbindlist ?

3. Да, это так. rbindlist(split(DT, by='f')) выдает оригинал DT со строками в порядке a, b, c.

4. @RuiBarradas пожалуйста, оставьте свой комментарий в качестве ответа

Ответ №1:

split Для объектов класса есть метод "data.table" . Но в отличие от метода base R для data.frames, есть аргумент by , для которого нужны имена столбцов в кавычках.

От help('split.data.table') , мой акцент:

Подробности
Аргумент f предназначен только для согласованности в использовании метода data.frame. Рекомендуется вместо этого использовать аргумент by, это будет быстрее, гибче и по умолчанию сохранит порядок в соответствии с порядком в данных.

 split(DT, by = 'f')
#$a
#   val f
#1:   1 a
#2:   4 a
#3:   6 a
#4:   7 a
#
#$b
#   val f
#1:   2 b
#2:   3 b
#3:   5 b
#
#$c
#   val f
#1:   8 c
  

Обратное rbindlist . Он выдает исходный DT со строками в порядке a , b , c .

 rbindlist(split(DT, by = 'f'))
#   val f
#1:   1 a
#2:   4 a
#3:   6 a
#4:   7 a
#5:   2 b
#6:   3 b
#7:   5 b
#8:   8 c