title: Immutible or not? Deedle frame filtering
body: <p>this question might look a little trivial, it does happen in our process as the data is not clean. I have a data frame looks like</p>
  
  <pre><code>let tt = Series.ofObservations[ 1=&gt;10.0; 3=&gt;20.0;5=&gt; 30.0; 6=&gt; 40.0; ]
  let tt2 = Series.ofObservations[1=&gt;  Double.NaN; 3=&gt; 5.5; 6=&gt;Double.NaN  ]
  let tt3 = Series.ofObservations[1=&gt; "aaa"; 3=&gt; "bb"; 6=&gt;"ccc" ]
  let f1 = frame ["cola" =&gt; tt; "colb"=&gt;tt2;]
  f1.AddColumn("colc", tt3)
  
   f1.Print();;
       cola colb      colc      
  1 -&gt; 10   &lt;missing&gt; aaa       
  3 -&gt; 20   5.5       bb        
  5 -&gt; 30   &lt;missing&gt; &lt;missing&gt; 
  6 -&gt; 40   &lt;missing&gt; ccc   
  </code></pre>
  
  <p>I need to filter out any row until the first row with a value in colb </p>
  
  <pre><code>     cola colb      colc      
  3 -&gt; 20   5.5       bb        
  5 -&gt; 30   &lt;missing&gt; &lt;missing&gt; 
  6 -&gt; 40   &lt;missing&gt; ccc
  </code></pre>
  
  <p>The only solution i can come up with is utilising a mutable flag which breaks the integrity of functional programming. maybe a this filtering missing head can be hidden in a library. but it still makes me wonder if i did not do it the right way.</p>
  
  <pre><code>let flag = ref false
  let filteredF1 = f1 |&gt; Frame.filterRows(fun k v -&gt; 
                                    match !flag, v.TryGetAs&lt;float&gt;("colb") with 
                                    | false, OptionalValue.Missing -&gt; flag := false
                                    | false, _ -&gt; flag := true
                                    | true, _ -&gt; ()
                                    !flag
                                    ) 
  </code></pre>
  
  <p>This is not really a problem of Deedle but more to do with how should immutability achieve this. Something easily achievable in Python and VBA seems to be very hard to do in F#.</p>
  
  <p>In statistic calculation situation like this happens where multiple serieses have a different starting time. And after the starting point (retaining) the data point containing the missing value is important as missing value means something.</p>
  
  <p>Any advice is appreciated.
  cassby</p>