Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
KDB和x2B\问:如何填充规则间隔的时间序列?_Kdb - Fatal编程技术网

KDB和x2B\问:如何填充规则间隔的时间序列?

KDB和x2B\问:如何填充规则间隔的时间序列?,kdb,Kdb,我正在尝试实现.ml.filltab[],它位于由规则间隔的时间聚合组成的时间序列数据表上,即: second | amount price -----------|---------------- 02:46:01 | 54 9953.5 02:46:04 | 150 02:46:05 | 9954.5 应用.ml.filltab[]函数不会更新索引,因此表会在没有适当索引的情况下错误地填充值。 i、 e 与正确填写以下

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

second     |  amount price 
-----------|----------------
02:46:01   |  54     9953.5
02:46:04   |  150          
02:46:05   |         9954.5
应用.ml.filltab[]函数不会更新索引,因此表会在没有适当索引的情况下错误地填充值。 i、 e

与正确填写以下索引相反:

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
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|
请注意,第二种类型需要转换为长类型才能使用til函数,然后再转换回第二种类型。此外,我们还添加了1以确保不会错过最后一次(
02:46:05

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

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
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
相同。现在,可以使用将两个表合并在一起,然后将前向填充任何空值:

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

这里实际上有两个单独的步骤:在表中填充空值,以及从表中生成具有规则间隔的时间序列

您已经有了填充空值的方法。要生成时间序列,可以使用函数

考虑到你的桌子(已经满了)

您可以通过首先定义带有所需采样时间的辅助表来生成时间序列

q)show ts:([]second:02:46:01+til 5)
second
--------
02:46:01
02:46:02
02:46:03
02:46:04
02:46:05
然后连接这两个表

q)aj[`second;ts;t]
second   amount price
----------------------
02:46:01 45     9953.5
02:46:02 45     9953.5
02:46:03 45     9953.5
02:46:04 150    9953.5
02:46:05 150    9954.5
当您的表包含多个仪器时,您可以轻松地扩展此方法以生成此类时间序列