【问题标题】:KDB+/Q:How to efficiently fill values (with zeros) whereby the column names conform to a given list?KDB+/Q:如何有效地填充值(用零),使列名符合给定列表?
【发布时间】:2020-08-20 15:20:39
【问题描述】:

给定以下字典(98h):

q) d
eid     kind      value1     value2   value3
------------------------------------------------------
0       `D        0          1        9
1       `A        1          0        0N

如何执行(修改/构造)以下选择:

q) d[`eid`kind`value1`value2`value3`value4] //thanks for correction

返回:

 0  1
`D `A
 0  1
 1  0
 9  0N
 `long$()

这样选择会返回以下内容:

 0  1
`D `A
 0  1
 1  0
 9  0
 0  0

即所有形式的空值,即列缺失和空值都替换为 0;

我尝试过使用where,但这不适用于缺少列,即

 00b
 00b
 00b
 00b
 01b
 `boolean$()

我也尝试过使用填充,即 0^。

编辑:这里的主要问题是我对从表中派生的矩阵的先验知识为零,即它可能如下所示

 00b
 01b
 00b
 `boolean$()
 00b
 00b

实现此功能的最佳方法是什么? 提前感谢您的指导。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    您指定的第一行有一个类型为 98h 的字典,一个字典的类型为 99h。您的 d 示例看起来像是一个类型为 98h 的表。以下是您要实现的目标(其中 d 是字典)?

    q)d: `eid`kind`value1`value2`value3!(0 1;`D`A;0 1; 1 0; 9 0N)
    q)update 0^value3 from d
    eid   | 0 1
    kind  | D A
    value1| 0 1
    value2| 1 0
    value3| 9 0
    
    

    【讨论】:

      【解决方案2】:

      您似乎想在这里做两件事:在给定列中填充空值,如果新列不存在,则生成一个新列。这可以同时实现:

      q)d:([]eid:0 1;kind:`D`A;value1:0 1;value2:1 0;value3:9 0N)
      q)@[;;{$[count x;y^x;y]};0]/[d;`value3`value4]
      eid kind value1 value2 value3 value4
      ------------------------------------
      0   D    0      1      9      0
      1   A    1      0      0      0
      

      【讨论】:

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