および列でdata.table
通常のmelt
スタイルの展開で大規模な (数百万行) が溶けています。テーブルをワイド形式でキャストする必要があります (変数をロールアップします)。問題は、データ テーブルに という名前のリスト列もあり、これを保持する必要があることです。これにより、非アトミック列を処理できないため、使用できなくなります。したがって、ロールアップは自分で行う必要があります。variable
value
data
reshape2
dcast
融解したデータ テーブルの操作に関する前の質問からの回答は、リスト列のため、ここでは当てはまりません。
思いついた解決策に満足していません。よりシンプルで高速な実装の提案を探しています。
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>