q - фильтр по групповым частотам

Я хотел бы отфильтровать таблицу по условию частоты групп в определенном столбце. Пример:

Данная таблица

tmp:([] id:`a`a`b`b`b`c; c2:1 2 3 4 5 6)

сначала найдите частоты каждой группы

ce:count each group tmp[`id]

затем выберите строки в tmp, где количество групп id больше, чем 1

select from tmp where id in where ce > 1

id  c2
a   1
a   2
b   3
b   4
b   5
(row id=`c is gone because it appeared only once)

Как это можно сделать более изящно?

Спасибо


person tenticon    schedule 18.01.2018    source источник


Ответы (1)


Вы можете использовать fby, например.

q)select from tmp where 1<(count;i) fby id
id c2
-----
a  1
a  2
b  3
b  4
b  5
person Jonathon McMurray    schedule 18.01.2018
comment
удобно использовать i. также можно использовать select from tmp where 1<(count;id) fby id - person tenticon; 18.01.2018
comment
Да, вы можете использовать любой столбец, поскольку все они, конечно, будут одинаковой длины. Традиционно большинство людей будут использовать i при подсчете, но подойдет любой. - person Jonathon McMurray; 18.01.2018