f#deedle基于列表过滤数据帧

时间:2014-06-08 14:13:20

标签: f# deedle

我想根据值列表过滤Deedle数据帧我将如何进行此操作?

我有一个想法,可以使用下面的代码:

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

然而,这个问题是它只基于一个变量,然后我考虑将它与for循环和追加函数结合起来:

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

然而,这也不起作用,必须有更好的方法,不使用for循环。在R中我可以使用%in%。

1 个答案:

答案 0 :(得分:3)

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

例如,假设您recd类型为seq<float>。然后你应该写:

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

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

  • 您可以将row.GetAs<float>("ts")替换为row?ts(它始终返回float,并且仅在您拥有固定名称时才有效,例如&#34; ts&#34;,但它使代码更好)

  • 比较float值可能不是最好的事情(由于浮点不精确,这可能并不总是按预期工作)。