我想根据值列表过滤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%。
答案 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
值可能不是最好的事情(由于浮点不精确,这可能并不总是按预期工作)。