r - 如何根据因子列快速将 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'])
解决方案
有一个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
反过来是rbindlist
。a
它以, 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
推荐阅读
- docker - Docker 卷替代品
- c# - C# BluetoothLE 我该如何开始
- android - 如何更改 findViewById 以查看绑定?
- html - 为什么美元符号会改变我在 Google Codelab 文本单元格中的格式?
- html - 如何在不使用css文件但在html中使用样式标签的情况下在django中应用背景图像?
- maven - 在 Azure Devops 上使用 WhiteSource Bolt Lab 管理开源安全和许可证时出现 Maven POM 文件错误
- google-api - Google People API:搜索特定组中的联系人并在特定时间后更新联系人
- python - Gensim 4.0.1 Word2Vec 模型的索引越界错误
- java - 使用 admob 奖励广告时的 Java.lang.verifyerror
- android - 在共享目录中创建和使用 Android AVD