【问题标题】:aggregation using ffdfdply function in R在 R 中使用 ffdfdply 函数进行聚合
【发布时间】:2014-01-23 22:38:36
【问题描述】:

我尝试使用 R 中的 ffdfdply 函数使用 'ffbase' 包对大型数据集进行聚合。
假设我有三个变量,分别称为 Date、Item 和 sales。在这里,我想使用 sum 函数汇总 Date 和 Item 的销售额。您能否指导我了解 R 中的一些正确语法。
在这里我尝试过这样的:

grp_qty <- ffdfdply(x=data[c("sales","Date","Item")], split=as.character(data$sales),FUN = function(data)  

summaryBy(Date+Item~sales, data=data, FUN=sum)).

非常感谢您的解决方案。

【问题讨论】:

  • ffdfply 不在基础 R 中。您应该提及您正在使用的包。
  • 好的,这里我使用了 ff 包。因为我们有 ffdfdply() 用于聚合。你能帮帮我吗?
  • 您应该将其编辑到问题中。当你在它的时候,也许把它清理一下?用 'u' 代替 'you' 并不是最好的风格。
  • 为了在 SO 上实现“立即回复”,通常提供minimal, reproducible example 比要求“立即回复”更好。顺便说一句,ffdfdplyffbase 包中,而不是在 ff 中。

标签: r grouping bigdata aggregation ffbase


【解决方案1】:

标记 ffdfdply 是 ffbase 的一部分,而不是 ff。 为了展示 ffdfdply 的用法示例,让我们生成一个有 50Mio 行的ffdf

  require(ffbase)
  data <- expand.ffgrid(Date = ff(seq.Date(Sys.Date(), Sys.Date()+10000, by = "day")), Item = ff(factor(paste("Item", 1:5000))))
  data$sales <- ffrandom(n = nrow(data))
  # split by date -> assuming that all sales of 1 date can fit into RAM
  splitby <- as.character(data$Date, by = 250000)
  grp_qty <- ffdfdply(x=data[c("sales","Date","Item")], 
                      split=splitby, 
                      FUN = function(data){
                        ## This happens in RAM - containing **several** split elements so here we can use data.table which works fine for in RAM computing
                        require(data.table)
                        data <- as.data.table(data)
                        result <- data[, list(sales = sum(sales, na.rm=TRUE)), by = list(Date, Item)]
                        as.data.frame(result)
                      })
  dim(grp_qty)

标记 grp_qty 是一个位于磁盘上的ffdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多