我正在尝试在我的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]
在这种情况下,“结果”可能会以两列结尾;A 和 B。 'A' 和 'B' 作为第一次调用 'fetch' 的一部分返回,只有 'B' 作为第二次调用的一部分返回。我希望示例代码返回此结果。
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)
任何想法表示赞赏。