0

我正在使用该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.

谢谢

4

1 回答 1

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)

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

于 2013-07-29T10:29:45.740 回答