title: data.table fill missing values from other rows by group
body: <pre><code># have
  &gt; aDT &lt;- data.table(colA = c(1,1,1,1,2,2,2,2,3,3,3,3), colB = c(4,NA,NA,1,4,3,NA,NA,4,NA,2,NA))
  &gt; aDT
      colA colB
   1:    1    4
   2:    1   NA
   3:    1   NA
   4:    1    1
   5:    2    4
   6:    2    3
   7:    2   NA
   8:    2   NA
   9:    3    4
  10:    3   NA
  11:    3    2
  12:    3   NA
  # want
  &gt; bDT &lt;- data.table(colA = c(1,1,1,1,2,2,2,2,3,3,3,3), colB = c(4,1,1,1,4,3,3,3,4,2,2,2))
  &gt; bDT
      colA colB
   1:    1    4
   2:    1    1
   3:    1    1
   4:    1    1
   5:    2    4
   6:    2    3
   7:    2    3
   8:    2    3
   9:    3    4
  10:    3    2
  11:    3    2
  12:    3    2
  </code></pre>
  
  <p>Would like to fill missing values according to the algorithm below:
  within each group ('colA'),</p>
  
  <ol>
  <li>use the value from one row below, if it's still NA, keeps going until the last row within that group</li>
  <li>if all NAs in rows below, look at rows above (go up 1 row at a time)</li>
  <li>if all NAs, then NA</li>
  </ol>
  
  <p>Since the dataset is quite large, algorithmic efficiency is part of consideration. Not sure if there's any package for this type of operation already. How to do it?</p>