12. 组内计算和排名

 

11. 连续累计计数

使用文本数据 meteorolog.txt 存储的气象数据,根据每日平均气温 TEMP,请计算 BEIJING 每一天的气温比当日所有观测站均值高几度,以及 BEIJING 每一天气温在所有观测站中的排名(从高到低)。

参考答案:

解答:

A
1 =T(“meteorolog.txt”,STATION,DATE,TEMP)
2 =A1.group(DATE; round(~.avg(TEMP),3):AVGTEMP, ~.(TEMP):TEMPRecs)
3 =A1.select(STATION:“BEIJING”)
4 =join@p(A3:bj;A2:all)
5 =A4.new(bj.DATE:DATE, bj.TEMP:TEMP,all.AVGTEMP:AVGTEMP, round(bj.TEMP-all.AVGTEMP,3):TEMPDiff, all.TEMPRecs.rank@z(bj.TEMP):TEMPRank)

A1 从文件中获取所需的字段。A2 先处理计算中所需要的每日总体数据,为此按日期分组,计算每日的平均气温 AVGTEMP,以及每天的所有日期数据 TEMPRecs,结果如下:

由于目标只需要计算 BEIJING 的数据,因此不需要计算其它数据。为此,在 A3 中获取 BEIJING 的原始数据如下:

对比 A2 和 A3 中的数据,可以发现它们都是按日期排序的,A2 中是每天的整体统计数据,A3 中则是单个观测站每天的数据,而计算温度差以及排名,需要将两者合并。为此,在 A4 中,用 join() 函数将两者连接,由于它们均按日期排序,所以添加了 @p 选项,只需要按照序号一一对应。A4 中结果如下:

其中 bj 为 BEIJING 站的观测数据,all 为每日全部站点的统计数据。在 A5 中,即可根据连接后的结果,生成结果表,计算时可以按照需要分别引用各自的字段。如用 all.TEMPRecs.rank@z(bj.TEMP),根据全部站点的所有温度数据,获得 BEIJING 站温度的排名,由于需要从高至低,因此添加了 @z 选项。


13. 用正则表达式分析文本
目录和习题数据