2017-06-14 2 views
0

J'apprends actuellement kdb +/q. J'ai un tableau de données. Je veux prendre 2 colonnes de données (juste des nombres), les comparer et créer une nouvelle colonne booléenne qui montrera si la valeur dans la colonne 1 est supérieure ou égale à la valeur dans la colonne 2.Créer une colonne booléenne affichant la comparaison entre 2 autres colonnes dans kdb +

Je suis à l'aise using la commande de mise à jour pour créer une nouvelle colonne, mais je ne sais pas comment faire en sorte qu'elle soit booléenne, comment comparer les valeurs et une méthode pour afficher le "plus grand que-ou-égal-à-ness" - est-ce possible de faire une simple sortie Y/N pour cela?

Merci.

Répondre

5
/ 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

Merci! Une autre méthode simple. Grande aide. – Jonathan

+0

Ce serait légèrement plus rapide que la réponse acceptée –

1

Utiliser un vecteur conditionnel: 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 

Utilisez meta pour confirmer la colonne GOE est de type booléen:

q)meta r 
    c  | t f a 
    -------| ----- 
    c1  | j 
    c2  | j 
    goe | b 
+0

Fantastique, et merci. Comme d'habitude avec ce genre de choses, c'est beaucoup plus simple que je ne l'imaginais. – Jonathan

+1

Pour ce que ça vaut, vous n'avez pas besoin du vecteur conditionnel. En utilisant l'opérateur supérieur à, vous générerez une liste de booléens pour vous: 'update goe: c1> = c2 de t' –