如何按F#连续分组值?

时间:2018-06-06 21:08:26

标签: f#

如果我上传了一个CSV文件,我将其分成SEQUENCE中的行。

如果在ROW 1中有一个值的多个实例,我如何用ROW 1中的值平均ROW 2中的值,所以我现在只有ROW 1中每个值的一个实例。 /> {这只是一个例子,ROW 1和ROW 2是理论上的。}

请注意我正在使用序列。

数据示例和理想结果如下:

给出了什么:

Row 1 --- Row 2 (Dollars)   
2010  ---    50000.198  
2010  ---    45151.451  
2011  ---    75641.372  
2011  ---    91652.710  
2012  ---    11281.450  
2012  ---    70046.154  
2012  ---    97778.054  
2013  ---    555574.501 
2013  ---    78921.215

我想要的:

Row 1 --- Row 2
2010  ---    47575.825
2011  ---    93647.041
2012  ---    59701.886 
2013  ---    317247.858

1 个答案:

答案 0 :(得分:3)

听起来您已经解析了CSV文件并将值拉入序列中。对于这个例子,让我们假设你把它拉成一个元组列表,其中year作为第一个元素,cost作为第二个元素,相当于:

master

您可以使用一些let costByYear = [ (2010,50000.198) (2010,45151.451) (2011,75641.372) (2011,91652.710) (2012,11281.450) (2012,70046.154) (2012,97778.054) (2013,555574.501) (2013,78921.215) ] 个功能按年份分组(Seq.groupBy),然后平均费用(Seq.average):

Seq

运行此:

let avgCostPerYear =
    let avg (year, costs) = (year, Seq.average <| Seq.map snd costs)
    Seq.groupBy fst >> Seq.map avg

的产率:

printfn "%A" (avgCostPerYear costByYear)