【问题标题】:How to select a subset of columns from table with list in kdb+/q?如何从带有 kdb+/q 列表的表中选择列的子集?
【发布时间】:2019-09-03 21:46:45
【问题描述】:

给定下表:

time     | col1  col2  col3  ...
--------------------------------
10:53:02 | 89    89    76    ...
...

如何从该表(包括索引)中选择列名列表引用的列子集,即cols:('col1';'col3'); 因此预期的结果是:

time     | col1  col3
----------------------
10:53:02 | 89    89   
...

谢谢

【问题讨论】:

  • 只是指出,cols 在 KDB+ 中不是一个有效的变量名,因为它已经是一个内置函数的名称。通常小写的c 就足够了。在上面,cols:('col1';'col3') 最好写成c:`col1`col2

标签: kdb


【解决方案1】:

您可以在每个右 (/:) 副词中使用带 (#) 关键字。 因此 q 将从表 t 中获取 sym 和 price 列的子集,并返回一个包含您的键和所需数据子集的表

q)t:([time:.z.z+ 1 2];sym:`a`b;price:10 20;vol:30 40)
q)c:`sym`price
q)c#/:t
time                   | sym price
-----------------------| ---------
2019.09.05T07:56:36.069| a   10
2019.09.06T07:56:36.069| b   20

【讨论】:

    【解决方案2】:

    有几种方法可以做到这一点:

    q) t:([time:.z.z+ 1 2];sym:`a`b;price:10 20;vol:30 40)
    

    输出所需的列:

    q) c:`sym`price  
    

    将表键列添加到上面的列表中:

    q) c:keys[t],c
    

    使用功能选择:

    q) keys[t] xkey ?[`t;();0b;c!c]
    

    使用 Take(#) 运算符

    q) keys[t] xkey c#0!t
    

    输出:

    time                   | sym price
    -----------------------| ---------
    2019.09.04T23:05:21.577| a   10
    2019.09.05T23:05:21.577| b   20
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多