Data.table ff/ffbase R 包中的 setDT 功能

Data.table setDT functionality in ff/ffbase R packages

计算条件均值列,在 ff/ffbase 包中。 我正在搜索 ff/ffbase 包中的功能,它允许我进行类似于下面使用 data.table 包进行的数据操作:

library(data.table)
irisdf <- as.data.table(iris)
class(irisdf)
#"ffdf"
irisdf[,  NewMean:= mean(Sepal.Length), Species] 

ffbase 中有一个条件均值函数,但是,它在 irisdf[,5] 中创建长度为 类 的向量:

condMean(x = irisdf[,1], index = irisdf[,5], na.rm = FALSE)

,而不是长度为 nrow(irisdf).

的新向量

正如@BondedDust 所建议的那样ave(base) 给出了正确的输出:

VectorOfMeans <- ave(irisdf[,1], irisdf[,5], FUN=mean)

所以最后一个问题是,如何将 VectorOfMeans 添加到 irisdf,我试过下面的代码,有效:

irisdf=as.ffdf(iris)
VectorOfMeans <- as.ffdf(as.ff(ave(irisdf[,1], irisdf[,5], FUN=mean)))
irisdf <- cbind.ffdf2(df,VectorOfMeans )

with cbind.ffdf2 来自 SO 答案,但我想,SO 问题是关于比主要问题更具体的问题,我想有一种更简单(更快)的方法可以做到这一点。我希望能够 运行 bigglm.ff 在获得的数据集上(例如 irisdf ),你应该看看我关于合并 VectorOfMeansirisdf 的问题上下文(因为 physical/virtual 存储模式存在问题,我不了解细节)。

也许这有帮助

library(data.table)
library(ffbase)
x1 <- as.ffdf(iris)
fd1 <- ffdfdply(x1, split=as.character(x1$Species), FUN=function(x) {
 x2 <- as.data.table(x)
 res <- x2[, NewMean:= mean(Sepal.Length), Species]
 as.data.frame(res)
}, trace=T)