5

および列でdata.table通常のmeltスタイルの展開で大規模な (数百万行) が溶けています。テーブルをワイド形式でキャストする必要があります (変数をロールアップします)。問題は、データ テーブルに という名前のリスト列もあり、これを保持する必要があることです。これにより、非アトミック列を処理できないため、使用できなくなります。したがって、ロールアップは自分で行う必要があります。variablevaluedatareshape2dcast

融解したデータ テーブルの操作に関する前の質問からの回答は、リスト列のため、ここでは当てはまりません。

思いついた解決策に満足していません。よりシンプルで高速な実装の提案を探しています。

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>
4

2 に答える 2