def rolling_fillna!(direction=:forward)
      enum = direction == :forward ? index : index.reverse_each
      last_valid_value = 0
      enum.each do |idx|
        if valid_value?(self[idx])
          last_valid_value = self[idx]
        else
          self[idx] = last_valid_value
        end
      end
      self
    end
def rolling_fillna!(direction=:forward)
      enum = direction == :forward ? index : index.reverse_each
      last_valid_value = 0
      enum.each do |idx|
        if valid_value?(self[idx])
          last_valid_value = self[idx]
        else
          self[idx] = last_valid_value
        end
      end
      self
    end
Rolling fillna
 replace all Float::NAN and NIL values with the preceeding or following value

 @param direction [Symbol] (:forward, :backward) whether replacement value is preceeding or following

 @example
  dv = Daru::Vector.new([1, 2, 1, 4, nil, Float::NAN, 3, nil, Float::NAN])

   2.3.3 :068 > dv.rolling_fillna(:forward)
   => #<Daru::Vector(9)>
   0   1
   1   2
   2   1
   3   4
   4   4
   5   4
   6   3
   7   3
   8   3