kdb +:用0替换空整数

时间:2015-05-03 17:07:39

标签: kdb

考虑下表:

myTable:

a     b
-------
1     
2
3     10
4     50
5     30

如何用零替换b的空单元格?结果将是:

a     b
-------
1     0
2     0
3     10
4     50
5     30

现在我正在做:

myTable: update b:{$[x~0Ni;0;x]}'b from myTable

但我想知道是否有更好/更容易的解决方案。

2 个答案:

答案 0 :(得分:6)

使用fill operator^

示例表:

q) tbl:flip`a`b!(2;0N)#10?0N 0N 0N,til 3
    a b
    ---
    0 2
    1 1
    1 1
      1
    1

使用0:

填充所有列中的空值
q)0^tbl
    a b
    ---
    0 2
    1 1
    1 1
    0 1
    1 0

仅在带有0的选择列中填充空值:

q)update 0^b from tbl
    a b
    ---
    0 2
    1 1
    1 1
      1
    1 0

答案 1 :(得分:1)

在某些情况下,如果要从先前的非空值中填充空值,可以使用fills函数。

q)tbl:flip`a`b!(2;0N)#10?0N 0N 0N,til 3
a b
---
2 1

  1
1 2
0

update fills a, fills b from tbl
q)a b
---
2 1
2 1
2 1
1 2
0 2

fills与聚合

一起使用
q)tbl:update s:5?`g`a from flip`a`b!(2;0N)#10?0N 0N 0N,til 3
a b s
-----
1   a
  2 a
0 0 g
2 2 g
0   a

q)update fills a, fills b by s from tbl
a b s
-----
1   a
1 2 a
0 0 g
2 2 g
0 2 a