使用F#中的Deedle时间序列中的缺失值(1)

时间:2017-05-17 09:46:39

标签: f# missing-data deedle

这是一个小例子,我想在系列中处理自定义函数的缺失值。

假设我已经获得了一系列

 series4;;
 val it : Series<int,int opt> =
 1 -> 1         
 2 -> 2         
 3 -> 3         
 4 -> <missing> 

例如,这样:

 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

然后,如果我这样做,

 Series.mapAll (fun v -> match v with
                             | Some a -> (a>1)
                             | _-> false) series4

失败

  

System.Exception:由于之前的原因,操作无法完成   error类型'int选项'与'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<int,int opt> =
     1 -> false         
     2 -> true         
     3 -> true         
     4 -> <missing> 

那里的语法是什么?理想情况下,如果有<missing>值,我希望新系列中相同键的值为<missing>

基本上我需要在int opt类型

上进行模式匹配

奖金问题:在Deedle中是否存在一些常用运算符的向量化运算符,例如“&gt;” ? (series1&gt; series2)当两个系列具有相同的键类型时,将返回一系列新的布尔值(选项?)类型

感谢

1 个答案:

答案 0 :(得分:0)

你可以这样做:

let series5 =
    series4
    |> Series.mapValues(OptionalValue.map(fun x -> x > 1))

您可以在documentation

中阅读有关模块OptionalValue的信息