У меня есть проблема с R, ffdfdply функциюR ffdfdply раскол вопрос
a=as.ffdf(data.frame(b=11:20,c=c(4,4,4,4,4,5,5,5,5,5), d=c(1,1,1,0,0,0,1,0,1,1)))
ffdfdply(a, split=a$c, FUN= function(x) {data.frame(cumsum(x$d))}, trace=T)
Выход его генерации является просто накопленная сумма без учета критериев разделения.
мне нужен выход, как этот
c cumsum
4 1
4 2
4 3
4 4
4 4
5 0
5 1
5 1
5 2
5 3
Можем ли мы включить несколько столбцов под «раскол»? Было бы здорово, если бы кто-нибудь предоставил пример.
Спасибо.
@jwijffels, я проверить свое решение на другом наборе данных
i=as.ffdf(data.frame(a=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2), b=c(1,4,6,2,5,3,1,4,3,2,8,7,1,3,5,4,2,6,3,1,2), c=c(1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2), d=c(1,0,1,1,0,1,0,1,1,0,0,1,1,1,0,0,1,1,1,1,0)))
Выход я получил неправильно. Мне нужна кумулятивная сумма столбца d на основе столбцов a и c.
ниже шаг является правильным и дал правильный результат
idx <- ffdforder(i[c("a","c","b")])
ordered_i <- i[idx, ]
ordered_i$key_a_c <- ikey(ordered_i[c("a", "c")])
, но когда я пытаюсь кумулятивную сумму, получили неправильный результат.
cumsum_i <- ffdfdply(ordered_i, split=as.character(ordered_i$key_a_c), FUN= function(x) {
## Data in RAM, on which you can use data.table
x <- as.data.table(x)
result <- x[, cumsum_a_c := cumsum(x$d), by = list(key_a_c)]
as.data.frame(result)
}, trace=T)
Просьба помочь. Мне нужно запустить этот набор команд для больших данных.
Возможный дубликат [с использованием ffdfdply для разделения данных и получения характеристик каждого идентификатора в расколе] (http://stackoverflow.com/questions/10981384/using-ffdfdply-to-split-data -and-get-characteristics-of-each-id-in-the-split) – thelatemail
Используйте cumsum_a_c: = cumsum (d) вместо cumsum_a_c: = cumsum (x $ d). Это правильный синтаксис data.table внутри FUN. – jwijffels