Как я могу подсчитать пустые записи по столбцу в таблице kdb q? - PullRequest
0 голосов
/ 10 октября 2018

Учитывая таблицу, которая содержит количество пустых записей, как я могу создать сводную таблицу, которая описывает количество пустых значений в столбце?Можно ли это сделать в общей таблице, в которой количество столбцов и их имена заранее неизвестны?

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 голосов
/ 10 октября 2018

Чтобы создать таблицу со столбцами в качестве заголовков и числом нулей и значений, которые вы можете использовать:

q)tab:enlist sum null t

, который включает в себя словарь с числом нулей в качестве значений и имена столбцов какключи:

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

Если вы хотите это в заданном формате, вы можете использовать:

result:([]columnNames:cols tab; nullCount:raze value each tab)
0 голосов
/ 10 октября 2018

Хотя 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
0 голосов
/ 10 октября 2018

Вы можете создать такую ​​таблицу, используя

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

, и мы применяем имена столбцов в качестве ключейи переверните к столу.

...