【发布时间】:2013-01-11 11:17:12
【问题描述】:
我在variable 和value 列中有一个大的(数百万行)data.table 与通常的melt 样式展开。我需要以广泛的形式投射表格(向上滚动变量)。问题是数据表还有一个名为data 的列表列,我需要保留它。这使得无法使用reshape2,因为dcast 无法处理非原子列。因此,我需要自己做卷起。
来自previous question 的关于使用融合数据表的答案在此处不适用,因为列表列。
我对我提出的解决方案不满意。我正在寻找更简单/更快实施的建议。
x <- LETTERS[1:3]
dt <- data.table(
x=rep(x, each=2),
y='d',
data=list(list(), list(), list(), list(), list(), list()),
variable=rep(c('var.1', 'var.2'), 3),
value=seq(1,6)
)
# Column template set up
list_template <- Reduce(
function(l, col) { l[[col]] <- col; l },
unique(dt$variable),
list())
# Expression set up
q <- substitute({
l <- lapply(
list_template,
function(col) .SD[variable==as.character(col)]$value)
l$data = .SD[1,]$data
l
}, list(list_template=list_template))
# Roll up
dt[, eval(q), by=list(x, y)]
x y var.1 var.2 data
1: A d 1 2 <list>
2: B d 3 4 <list>
3: C d 5 6 <list>
【问题讨论】:
-
@Arun 完成;我在简化代码并提出一个可重现的示例时发布了。
标签: r data.table bigdata reshape