有没有更好的方法来找到Deedle系列中缺失值的第一个键?

时间:2017-11-02 21:37:36

标签: f# missing-data deedle

我需要找到Deedle系列中第一个缺失值的关键。我能够编写下面的函数,这似乎有效。我想知道Deedle是否有更好的方法,更常见的是快速函数返回丢失(或不丢失)值的所有键。

let firstMissing (s: Series<'a,_>) = 
let e = (s.Keys).GetEnumerator()

let rec loop () =
    if e.MoveNext() then
        if s |> Series.has e.Current then loop ()
        else e.Current |> Some
    else None

loop ()

let s2 = Series.ofOptionalObservations [ 1 => Some(1.0); 2 => None ]
// val it : Series<int,float> =
  series [ 1 => 1; 2 => <missing>]
firstMissing s2
val it : int option = Some 2

let s4 = Series.ofValues [1..4]
firstMissing s4
val it : int option = None

1 个答案:

答案 0 :(得分:3)

我认为在找到没有值的键之前,除了扫描键之外没有任何其他选择,但你可以使用返回键序列的Series.observationsAll更好地完成它,配对带有可选值:

s2 |> Series.observationsAll |> Seq.tryPick (function (k, None) -> Some k | _ -> None)

如果所有键都有值,则返回None,而第一个键的值为Some k,否则返回值。