首页 > 解决方案 > 如何根据因子列快速将 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'])

标签: rlistsplitdata.tabledata-manipulation

解决方案


有一个split类对象的方法"data.table"。但与 base R 的 data.frames 方法不同,有一个参数by需要引用的列名。

help('split.data.table'),我的重点:

详细
参数 f 只是为了与 data.frame 方法的使用保持一致。推荐使用 by argument,它会更快,更灵活,并且默认情况下会根据数据中的顺序保留顺序。

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

反过来是rbindlista它以, b, .的顺序给出原始 DT 行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

推荐阅读