问题
This question is related to Working with missing values in Deedle Time Series in F# (1)
Suppose i have a Series<'K,'T opt> with some missing values
For example i have obtained a series
series4;;
val it : Series<int,int opt> =
1 -> 1
2 -> 2
3 -> 3
4 -> <missing>
I could have got it this way:
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
However, in Deedle if you do
let series1_plus_2 = series1+series2
val series1_plus_2 : Series<int,int> =
1 -> 3
2 -> 4
3 -> 4
4 -> <missing>
you can see that the type Series<int,int> also naturally allows for missing values. And this seems the natural way to use functions in Deedle handling missing values
So my question is given series4 of type Series<int,int opt>, how do i get back a series with the "same" values but a type Series<int,int> ????
Notably, strange things are happening
for example, Series.dropMissing has not the expected behaviour when applied to series4
Series.dropMissing series4;;
val it : Series<int,int opt> =
1 -> 1
2 -> 2
3 -> 3
4 -> <missing>
its NOT dropping the missing value !!
回答1:
Main problem here is that int opt is not Deedle standard way to handle missing values. Value in series4 is not missing, but it have value OptionalValue.Missing. You can convert Series<int, int opt> to Series<int, int> for example this way:
let series4' = series4 |> Series.mapAll (fun _ v -> v |> Option.bind OptionalValue.asOption)
来源:https://stackoverflow.com/questions/44029025/working-with-missing-values-in-deedle-time-series-in-f-2