我现在正在学习kdb+/q,我有一个数据表。我想获取两列数据(只是数字),比较它们,并创建一个新的布尔列,该列将显示列1中的值是否大于或等于列2中的值。
我习惯于使用update命令创建一个新列,但是我不知道如何确保它是布尔值,如何比较这些值以及显示“大于或等于”的方法-是否可以为此执行简单的Y/N输出?
谢谢。
发布于 2017-06-14 23:10:30
/ 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
发布于 2017-06-14 23:13:05
使用向量条件:http://code.kx.com/q/ref/lists/#vector-conditional
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
发布于 2018-06-03 08:20:47
操作运算符可以很好地处理向量,但在某些情况下,当函数需要原子作为执行操作的输入时,您可能希望使用'
(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
https://stackoverflow.com/questions/44548408
复制相似问题