我正在使用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.
由于
答案 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)
如果您有一些优化的解决方案,请分享您的观点和代码。