当找到0时,R重置cumsum

时间:2013-07-29 07:44:25

标签: r

我正在使用ff包来加载excel文件。

i=as.ffdf(data.frame(a=c(1,1,1,1,1,1), b=c(1,4,6,2,5,3), c=c(1,1,1,1,1,1), d=c(1,0,1,1,0,1)))

我正在尝试获取d列的累积总和,并在找到0时重置它。我正在尝试获得以下输出。

a   b   c   d   Result
1   1   1   1   1
1   4   1   0   0
1   6   1   1   1
1   2   1   1   2
1   5   1   0   0
1   3   1   1   1

我知道,我可以通过ddply轻松实现它,但我有大量的data rows i.e. > 5000000 rows.

由于

1 个答案:

答案 0 :(得分:0)

这对24385601行有效但速度稍慢。我在列a和c上创建了唯一的组合,并使用Arun解决方案。键列(key_a_c)用于分割数据集,即重置cumsum。

Create a unique key on column a and c
    i$key_a_c <- ikey(i[c("a", "c")])

Generate cumulative series by spliting on the basis of key_a_c
    p1=ffdfdply(i, split=as.character(i$key_a_c), FUN= function(x) {
        x$Result <- as.ff(x[, "d"] * sequence(rle(x[, "d"])$lengths))
        as.data.frame(x)
    }, trace=T)

如果您有一些优化的解决方案,请分享您的观点和代码。