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

发布于 2022-09-12 04:03:25 字数 337 浏览 19 评论 0

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结合起来用,但不知该怎样结合?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

分开我的手 2022-09-19 04:03:25

可以用segmentby函数来实现:

v=[10,15,20,20,30,30,30,50,50,75];
step = 5
v1 = iif(nullFill(deltas(v),v)>0,0,1)
v_final =  v + segmentby(accumulate{add}, v1, v1) * step
花间憩 2022-09-19 04:03:25

最简单最高效的办法应该是使用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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文