一个数组中,如何按照连续相同的数据进行分组计算?

v=[10,15,20,20,30,30,30,50,50,75];
v_final=[10,15,20,25,30,35,40,50,55,75];

想把v转换成v_final的样子。在DolphinDB database中试了下面代码:

diff=eachPre(-,v,0);
v1=v + iif(diff>0, 0, 5);

得到v1为[10,15,20,25,30,35,35,50,55,75],但v1这样还不行,请问怎样弄下?就是要把diff=0的部分累加5而不是直接加5,好像应该和accumulate结合起来用,但不知该怎样结合?

请先 登录 后评论

1 个回答

Juntao Wang

最简单最高效的办法应该是使用cumPositiveStreak函数。连续的positive的数会累加,遇到0或负数置0

v=[10,15,20,20,30,30,30,50,50,75]
eachPre(eq, v).cumPositiveStreak() * 5 + v

segmentby是解决连续相同的数据分组计算的通用办法。

segmentby(x->x + seq(0, x.size() - 1) * 5, v, v)
请先 登录 后评论