如何用F#和/或Deedle中的数字范围组合.即我正在寻找脚下的数据,我想分成500英尺的桶
例如
我有像这样的数据
5000 5200 5700 5800 6100 6200 6300
我想要团体
{5000,5200} {5700,5800} {6100,6200,6300}
正如你在问题中提到Deedle,我将根据Deedle系列添加答案.如果您有一些观察结果并希望根据键(例如观察时间)对数据进行分组,这将非常有用.说我们有:
let obs = series [ 5000 => 1.0; 5200 => 2.0; 5700 => 3.0; 5800 => 4.0;
6100 => 5.0; 6200 => 6.0; 6300 => 7.0 ]
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用以下命令为每个存储桶创建包含一系列值的系列:
obs |> Series.chunkWhile (fun k1 k2 -> k1/500 = k2/500)
Run Code Online (Sandbox Code Playgroud)
这与Fyodor的答案中的伎俩相同 - 只要钥匙除以500对于桶中的所有项目都相同,我们就会将事物保存在一个桶中.
如果您想进行进一步的计算,例如获取系列的每个起始点的每个桶的平均值,这将非常有用:
obs
|> Series.chunkWhile (fun k1 k2 -> k1/500=k2/500)
|> Series.mapKeys (fun k -> (k / 500) * 500)
|> Series.mapValues Stats.mean
Run Code Online (Sandbox Code Playgroud)
但是,如果您只想在问题中计算组,那么Deedle可能有点过分.