Apply step function to values

  • A+
Category:Languages

I have the following table:

t:([]sym:`eae`oco`khd`dga`eob`iog`edg`kio`gme`iko; val:1 0 5 1 0 0 1 7 6 3)  sym val ------- eae 1   oco 0   khd 5   dga 1   eob 0   iog 0   edg 1   kio 7   gme 6   iko 3   

What I want is to assign some bucket value according to the following rules:

if 0 <= val < 1, then bucket = 3  if 1 <= val < 3, then bucket = 8 if 3 <= val < 5, then bucket = 20 if 5 <= val    , then bucket = 30 

So similar to applying a step function to the values val. The resulting table should look like this:

sym val bucket -------------- eae 1   8      oco 0   3      khd 5   30     dga 1   8      eob 0   3      iog 0   3      edg 1   8      kio 7   30     gme 6   30     iko 3   20   

Of course, I don't want to apply if[if[...]], and I am looking for an elegant q-ist solution.

 


The following works:

update bucket: (`s#0 1 3 5!3 8 20 30)[val] from t  

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: