【问题标题】:Data.table setDT functionality in ff/ffbase R packagesff/ffbase R 包中的 Data.table setDT 功能
【发布时间】:2015-04-08 11:33:51
【问题描述】:

计算条件均值列,在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 from SO 答案,但我想,SO 问题是关于更具体的问题然后主要的,我想有一个更容易(更快)方法来做到这一点。我希望能够在获得的数据集上运行bigglm.ff(例如irisdf),你应该看看我关于在这种情况下合并VectorOfMeansirisdf的问题(因为物理/虚拟模式存在问题我不了解的存储)。

【问题讨论】:

  • 我不认为机器和数据约束是明确的。还有一些赋值方法可以接受“i”-argument 请参阅 ?'[?'[<-.ffdf',了解此类对象的赋值函数的帮助页面。
  • @BondedDust 是的,甚至还有 condMean,用于条件均值,但输出的长度是类数,而不是数据集中的行数,并且类标签不被视为变量。跨度>
  • 在基础 R 中,这对于 ave 函数来说是个问题。即使是最简单的测试,您也没有发布最小的测试用例。
  • 我不清楚......不是 ff 用户......是否可以或不能使用带有 ff 向量的普通函数。因此,我建议您发布一个可重现的示例。您发布了一个 data.table 示例,...现在发布一个 ff 示例。当代码在我的机器上运行时,您的 irisdf 不是 ffdf 对象。
  • @BondedDust 你说得对ave

标签: r data.table ff ffbase


【解决方案1】:

也许这有帮助

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)

【讨论】:

    猜你喜欢
    • 2014-06-15
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2016-08-08
    • 2015-03-14
    • 1970-01-01
    相关资源
    最近更新 更多