Агрегация с использованием функции 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)).
Буду признателен за ваше решение.
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
который находится на диске.