J'essaie de trouver la valeur moyenne par type d'élément, puis définissez une variable y qui prend la valeur:Essayer de regrouper par moyenne et puis couper les valeurs aberrantes des observations basées sur la moyenne dans KDB
- valeur manquante si x = 0,
- y = x. Ensuite les valeurs rondes qui sont trop grands ou trop petits:
- si x> 0, x> mu, définissez alors y = mu
- si x < 0, x < mu, puis réglez y = mu
C'est ce que je l'ai essayé, qui ne produit pas le résultat désiré ci-dessous:
tab2:([]items:`a`b`a`a`b; x:-6 8 0 -3 5)
tabsum: select mu:avg x by items from tab2;
tab2: update y:x from tab2
tab2: update y:mu from tab2 where x > 0 and x > mu/get error after running above step
tab2: update y:mu from tab2 where x < 0 and x <= mu
résultat souhaité:
items x mu y
a -6 -3.0 -3.0
b 8 6.5 6.5
a 0 -3.0 NaN
a -3 -3.0 -3.0
b 5 6.5 5
Relatif à ces données:
i) NaN est-il le type approprié pour les valeurs manquantes dans kdb? (NA
est différent de NaN
ou NULL
dans R par exemple). Je suppose que c'est basé sur ce que j'ai lu jusqu'ici. Ii) Existe-t-il un code plus efficace pour obtenir la colonne mu à l'intérieur de tab2
? Faire une autre table et je suppose que la fusion n'est pas efficace (bases encore l'apprentissage de la KDB)
iii) Si je viens de lancer
tab2:([]items:`a`b`a`a`b; x:-6 8 0 -3 5)
tabsum: select mu:avg x by items from tab2;
tab2: update y:mu from tab2 where x > 0 and x > mu
Je reçois:
items x mu y
1 a -6 -3.0 NaN
2 b 8 6.5 6.5
3 a 0 -3.0 NaN
4 a -3 -3.0 NaN
5 b 5 6.5 6.5
Ligne 5 n'a pas de sens pour moi. Pourquoi y = 6.5 si x < mu? Je m'attends à y = 5 pour cette rangée. Clairement, ma compréhension de ce qui se passe est fausse.
iv) Comment puis-je obtenir le résultat souhaité (le code que j'ai posté ne fonctionne pas correctement)
merci pour le lien et l'explication! logique –