请问在DolphinDB中分组时,能否实现类似accumulate 的分组?

比如正常 group by [1,2,3,4] 会分成 4 组:[1],[2],[3],[4]. 但我现在希望能累积式的分组为 [1],[1,2],[1,2,3],[1,2,3,4]

我的应用场景是这样的:

比如算一天的日内分段的vwap,正常分组可能是 group by bar(time, 30*60*1000),这样得到的是每30min一个bar里的vwap。但现在需要的是累积的,即第一个组算出来是前30min 的vwap,第二个组算出来是前 60min 的vwap,第三个是前 90 min 的,依次类推。
阅读 1.8k
2 个回答

可以写个自定义函数来实现这个功能,比如:

t= table(1 2 3 4 1 2 3 4 as id, 1..8 as value)
grps = groups(t.id)
keys = grps.keys().sort()
grpCnt = keys.size()
ag1 = array(DOUBLE, grpCnt)
ag2 = array(DOUBLE, grpCnt)
rowIndices = array(INDEX, 0, t.size())
for(idx in 0:grpCnt){
 rowIndices.append!(grps[keys[idx]])
 ag1[idx] = avg(t.value[rowIndices])
 ag2[idx] = sum(t.value[rowIndices])
}
result = table(keys, ag1, ag2)

DolphinDB database最新版提供了cgroup by(cumulative group)功能。
cgroup by子句可进行累计分组计算,第二组的记录包含第一个组的记录,第三个组的记录包含前两组的记录,以此类推。详情请参阅https://www.dolphindb.cn/cn/h...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题