如何在kdb q表中按列计算空条目?

时间:2018-10-10 08:26:23

标签: kdb

给出一个包含许多空条目的表,如何创建一个描述每列空数量的摘要表?可以在不知道列数和列名的普通表上完成此操作吗?

q)t: ([] a: 1 2 3 4; b: (2018.10.08; 0Nd; 2018.10.08; 2018.10.08); c: (0N;0N;30;40); d: `abc`def``jkl)
q)t
a b          c  d
-------------------
1 2018.10.08    abc
2               def
3 2018.10.08 30
4 2018.10.08 40 jkl

预期结果:

columnName nullCount
--------------------
a          0
b          1
c          2
d          1

3 个答案:

答案 0 :(得分:3)

您可以使用以下表格制作

q)flip `columnName`nullCount!(key;value)@\:sum null t
columnName nullCount
--------------------
a          0
b          1
c          2
d          1

其中sum null t给出每列中空值的字典

q)sum null t
a| 0
b| 1
c| 2
d| 1

,然后将列名用作键并翻转到表。

答案 1 :(得分:3)

虽然sum null t是本示例中最简单的解决方案,但它不处理字符串(或嵌套)列。例如,要处理字符串或嵌套列,您将需要

q)t: ([] a: 1 2 3 4; b: (2018.10.08; 0Nd; 2018.10.08; 2018.10.08); c: (0N;0N;30;40); d: `abc`def``jkl;e:("aa";"bb";"";()," "))
q){sum$[0h=type x;0=count@'x;null x]}each flip t
a| 0
b| 1
c| 2
d| 1
e| 1

答案 2 :(得分:1)

要生成一个包含以列为标题,空值数和值的表,可以使用:

q)tab:enlist sum null t

其中一个字典以空值作为值,列名作为键:

    a b c d
    -------
    0 1 2 1

如果您随后希望以给定的格式使用它,则可以使用:

result:([]columnNames:cols tab; nullCount:raze value each tab)