2014-06-08 41 views
1

我想根据值列表过滤一个Deedle数据框我该如何去做这件事?基于列表的f#deedle过滤器数据框

我有一个主意,用下面的下面的代码:

let d= df1|>filterRowValues(fun row -> row.GetAs<float>("ts") = timex) 

但是这个问题是,它只是基于一个变量,我则认为这与结合的循环和追加的功能:

for i in 0.. recd.length -1 do 
    df2.Append(df1|>filterRowValues(fun row -> row.GetAs<float>("ts") = recd.[i])) 

但是,这不起作用,并且必须有更好的方法来做到这一点,而不使用for循环。在R我可以例如使用%in%。

回答

3

您可以使用F#集合类型来创建一组您感兴趣的值。在过滤中,您可以检查该集合是否包含该行的实际值。

例如,假设您有recd类型seq<float>。那么你应该能够编写:

let recdSet = set recd 
let d = df1 |> Frame.filterRowValues (fun row -> 
    recdSet.Contains(row.GetAs<float>("ts")) 

一些其他的东西,可能是有用的:

  • 你可以只用row?ts取代row.GetAs<float>("ts")(它总是返回float,当你有一个固定的只能名称,像“ts”,但它使代码更好)

  • 比较float值可能不是最好的事情要做(因为浮点不精确,这可能不会方式按预期工作)。

相关问题