【发布时间】:2017-04-01 04:31:02
【问题描述】:
我有一个带有列表列的data.table,其中每个元素都是一个data.table:
dt <- data.table(id = c(1, 1, 2),
var = list(data.table(a = c(1, 2), b = c(3, 4)),
data.table(a = c(5, 6), b = c(7, 8)),
data.table(a = 9, b = 10)))
dt
# id var
# 1: 1 <data.table>
# 2: 1 <data.table>
# 3: 2 <data.table>
现在我想“取消列出”这个结构:
a b id
1: 1 3 1
2: 2 4 1
3: 5 7 1
4: 6 8 1
5: 9 10 2
我知道如何使用rbindlist 扩展嵌入的data.table 部分,但只是不知道如何将扁平化的data.table 与变量“id”绑定。
原始数据集包含 3000 万行和数十个变量,因此如果您提出不仅可行而且内存高效的解决方案,我将不胜感激。
【问题讨论】:
-
@Frank 感谢您的评论,但我不得不说此解决方案仅适用于 id 唯一的情况。如果 id 重复,则 var[[1]] 仅检索每个 id 的第一行。我已经修改了我的示例以结合这种情况。
-
好的,我猜我的答案(如下)已经解决了这个问题。
标签: r data.table