агрегация с использованием функции ffdfdply в R

Я попробовал агрегировать большой набор данных, используя пакет ffbase, используя функцию ffdfdply в R.
Допустим, у меня есть три переменные: Дата, Товар и продажи. Здесь я хочу агрегировать продажи по дате и элементу, используя функцию суммы. Не могли бы вы рассказать мне о правильном синтаксисе в 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)).

Буду признателен за ваше решение.


person Chaitanya Krishna T    schedule 06.01.2014    source источник
comment
ffdfply отсутствует в базе R. Вы должны указать, какие пакеты вы используете.   -  person Dason    schedule 06.01.2014
comment
Хорошо, здесь я использовал пакет ff. В том, что у нас есть ffdfdply() для агрегации. не могли бы вы помочь мне.   -  person Chaitanya Krishna T    schedule 06.01.2014
comment
Вы должны отредактировать это в вопросе. Пока вы на нем, может быть, немного почистить его? «u» вместо «you» здесь не лучший стиль.   -  person Dason    schedule 06.01.2014
comment
Чтобы получить немедленный ответ на SO, обычно лучше предоставить минимальный воспроизводимый пример, чем требовать немедленного ответа. Кстати, ffdfdply находится в пакете ffbase, а не в ff.   -  person Henrik    schedule 06.01.2014


Ответы (1)


Отметьте, что ffdfdply является частью ffbase, а не ff. Чтобы показать пример использования ffdfdply, давайте сгенерируем ffdf с 50 миллионами строк.

  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, который находится на диске.

person Community    schedule 06.01.2014