is there nicer way calculate lag (value - previous value) in ruby? came with. if lag greater 0 return 1
, if less return -1
(my code below not work. using ruby 2.3.5)
def lagchange(arr,k=1) prev=nil ret=[] arr.each{|x| if(x.to_i>-9999) ret<<if(x-prev>0){1}else{-1}end else ret<<"na" end prev=x.to_i } return ret end lagchange([1,2,3,5]) #na 1 1 -1
looks spaceship operator might come in handy here:
def lagchange(arr) arr.map.with_index |x, idx| idx == 0 ? "na" : x <=> arr[idx - 1] end end lagchange([1,2,2,1]) => ["na", 1, 0, -1]
note returns 0 if equal(no lag).