gpt4 book ai didi

KDB+\q : How to fill regularly spaced time series?

转载 作者:行者123 更新时间:2023-12-04 22:39:19 27 4
gpt4 key购买 nike

我正在尝试实现位于 here 的 .ml.filltab[]在由定期间隔的时间聚合组成的时间序列数据表上,即:

second     |  amount price 
-----------|----------------
02:46:01 | 54 9953.5
02:46:04 | 150
02:46:05 | 9954.5

应用 .ml.filltab[] 函数不会更新索引,因此表格会在没有适当索引的情况下错误地填充值。即

second     |  amount price 
-----------|----------------
02:46:01 | 54 9953.5
02:46:04 | 150 9953.5
02:46:05 | 150 9953.5

相对于正确填写索引如下:

second     |  amount price 
-----------|----------------
02:46:01 | 54 9953.5
02:46:02 | 54 9953.5
02:46:03 | 54 9953.5
02:46:04 | 150 9953.5
02:46:05 | 150 9954.5

除了上述之外,它还需要一个用于对数据进行分组的列,即一个 `sym 列,这在仅聚合单个系列时是不必要的。

如何对缺少索引的表运行填充操作?谢谢

最佳答案

这样做的一种方法是创建一个具有相同架构的辅助空表,其中第二列包含所有缺失的时间点。为此,请创建一个您感兴趣的所有时间的列表。这样做的一种方法是获取第一个和最后一个元素并执行以下操作:

q)f:exec first second from t
q)f
02:46:01
q)l:exec last second from t
q)l
02:46:05
q)s:f+`second$til 1+`long$l-f
q)s
02:46:01 02:46:02 02:46:03 02:46:04 02:46:05

请注意,需要将第二种类型转换为 long 类型才能使用 til 函数,然后再转换回第二种类型。此外,我们加 1 以确保不会错过最后一次 (02:46:05)。

我们可以通过以下操作创建具有相同架构的空表:

q)et:select by second:s from 0#t
q)et
second | amount price
--------| ------------
02:46:01|
02:46:02|
02:46:03|
02:46:04|
02:46:05|

0# 是一种快速创建与原始表t 具有相同架构的空表的方法。现在是 lj可用于将两个表合并在一起,fills然后将向前填充任何空值:

q)et lj t
second | amount price
--------| -------------
02:46:01| 54 9953.5
02:46:02|
02:46:03|
02:46:04| 150
02:46:05| 9954.5
q)fills et lj t
second | amount price
--------| -------------
02:46:01| 54 9953.5
02:46:02| 54 9953.5
02:46:03| 54 9953.5
02:46:04| 150 9953.5
02:46:05| 150 9954.5

关于KDB+\q : How to fill regularly spaced time series?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57763858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com