j
関数が呼び出しごとに異なる数の列を返すことができるdata.table を使用しようとしています。rbind.fill
不足している列をNA
.
fetch <- function(by) {
if(by == 1)
data.table(A=c("a"), B=c("b"))
else
data.table(B=c("b"))
}
data <- data.table(id=c(1,2))
result <- data[, fetch(.BY), by=id]
この場合、'result' は 2 つの列になる可能性があります。A と B。'A' と 'B' は 'fetch' への最初の呼び出しの一部として返され、'B' のみが 2 番目の呼び出しの一部として返されました。サンプルコードがこの結果を返すようにしたいと思います。
id A B
1 1 a b
2 2 <NA> b
残念ながら、実行するとこのエラーが発生します。
Error in `[.data.table`(data, , fetch(.BY, .SD), by = id) :
j doesn't evaluate to the same number of columns for each group
次のようにこれを行うことができますplyr
が、実際のユースケースplyr
ではメモリが不足しています。への各呼び出しはかなり迅速に行われますが、すべてのデータをマージして戻そうとするとfetch
メモリ クラッシュが発生します。この問題を解決plyr
できるかどうかを確認しようとしています。data.table
result <- ddply(data, "id", fetch)
どんな考えでも大歓迎です。