我正在学习kdb + / q。 我有一张数据表。我想获取2列数据(只是数字),比较它们并创建一个新的布尔列,它将显示第1列中的值是否大于或等于第2列中的值。
我很乐意使用update命令创建一个新列,但我不知道如何确保它是布尔值,如何比较值和一个方法来显示“大于或等于 - to-ness“ - 是否有可能为此做一个简单的Y / N输出?
感谢。
答案 0 :(得分:6)
/ 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
答案 1 :(得分:1)
使用矢量条件: http://code.kx.com/q/ref/lists/#vector-conditional
var balls = [];
var size = 10;
for(var i=0; i<size; i++){
var temp = getRandomInt(20,50);
console.log('this temp: ' + temp);
balls.push({
x: 100,
y: 100,
radius: temp,
mass : temp
})
}
function getRandomInt(min,max){
return Math.floor(Math.random() * (max - min + 1) + min);
}
使用meta确认goe列是布尔类型:
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
答案 2 :(得分:0)
操作<=
适用于向量,但在某些情况下,当函数需要原子作为执行操作的输入时,您可能希望使用'
(each-both
运算符)。
e.g。比较符号字符串的长度与另一列值
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