Создайте логический столбец, отображающий сравнение между 2 другими столбцами в kdb+

В настоящее время я изучаю kdb+/q. У меня есть таблица данных. Я хочу взять 2 столбца данных (только цифры), сравнить их и создать новый логический столбец, который покажет, больше или равно значение в столбце 1 значению в столбце 2.

Мне удобно использовать команду update для создания нового столбца, но я не знаю, как убедиться, что он логический, как сравнить значения и метод для отображения "больше-или-равно-равному" "- возможно ли сделать простой вывод Y/N для этого?

Благодарю.

3 ответа

Решение
/ dummy data
q) show t:([] a:1 2 3; b: 0 2 4)
    a b
    ---
    1 0
    2 2
    3 4

/ add column name 'ge' with value from b>=a
q) update ge:b>=a from t
    a b ge
    ------
    1 0 0
    2 2 1
    3 4 1

Операция <= хорошо работает с векторами, но в некоторых случаях, когда функция нуждается в атомах в качестве входных данных для выполнения операции, вы можете использовать ' (each-both оператор).

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

q)f:{x<=count string y}
q)f[3;`ab]
0b

q)t:([] l:1 2 3; s: `a`bc`de)
q)update r:f'[l;s] from t
l s  r
------
1 a  1
2 bc 1
3 de 0

Используйте условный вектор: http://code.kx.com/q/ref/lists/

    q)t:([]c1:1 10 7 5 9;c2:8 5 3 4 9)
    q)r:update goe:?[c1>=c2;1b;0b] from t
    c1 c2 goe
    -------------
    1  8  0
    10 5  1
    7  3  1
    5  4  1
    9  9  1

Используйте meta, чтобы подтвердить, что столбец goe имеет логический тип:

  q)meta r
   c      | t f a
   -------| -----
   c1     | j
   c2     | j
   goe    | b
Другие вопросы по тегам