处理F#(1)中Deedle时间序列中的缺失值

处理F#(1)中Deedle时间序列中的缺失值,f#,missing-data,deedle,F#,Missing Data,Deedle,下面是一个小示例,我想处理series上自定义函数的缺失值 假设我得到了一个级数 series4;;  val it : Series<int,int opt> =  1 -> 1  2 -> 2  3 -> 3  4 -> <missing> 如果我这样做了 Series.mapAll (fun v -> match v with

下面是一个小示例,我想处理series上自定义函数的缺失值

假设我得到了一个级数

 series4;;
 val it : Series<int,int opt> =
 1 -> 1         
 2 -> 2         
 3 -> 3         
 4 -> <missing> 
如果我这样做了

 Series.mapAll (fun v -> match v with
                             | Some a -> (a>1)
                             | _-> false) series4
这是失败的

System.Exception:由于早期错误,无法完成操作 错误类型“int option”与类型“int opt”不匹配。看见 同时输入.fsx(4,42)-(4,49)。在4,42

而我希望结果是

val it : Series<int,bool opt> =
     1 -> false        
     2 -> true         
     3 -> true         
     4 -> false
val-it:Series=
1->错误
2->正确
3->正确
4->错误
更好的是能够得到这样的结果

val it : Series<int,int opt> =
     1 -> false         
     2 -> true         
     3 -> true         
     4 -> <missing> 
val-it:Series=
1->错误
2->正确
3->正确
 4 ->  
正确的语法是什么?理想情况下,如果有一个
值,我希望新系列中的同一个键有一个

基本上,我需要在
int opt
类型上进行模式匹配

附加问题:Deedle中是否有一些常用操作符(如“>”)的矢量化操作符? (series1>series2)当两个序列具有相同的键类型时,将返回一个新的布尔(选项?)类型序列


谢谢

您可以这样做:

 let series1 = Series.ofObservations [(1,1);(2,2);(3,3)]
 let series2 = Series.ofObservations [(1,2);(2,2);(3,1);(4,4)]

 let series3 = series1.Zip(series2,JoinKind.Outer);;
 let series4 = series3 |> Series.mapValues fst
let series5 =
    series4
    |> Series.mapValues(OptionalValue.map(fun x -> x > 1))

您可以阅读

系列中的模块
OptionalValue
。mapAll
似乎接受一个返回
选项的函数
,因此我认为您需要在函数中返回
一些(a>1)
一些false