计算并绘制季内平均值
在上一个练习中,您使用了 endpoints() 和 period.apply(),快速计算了波士顿红袜每个赛季末的胜负平均值。那么,如果您需要了解每个赛季「整个过程中」的累积平均值呢?统计学家和体育迷经常依赖这一指标来比较球队与其对手的表现。
要在每个赛季内计算累积平均值,您需要回到第 3 章练习过的 split-lapply-rbind 模式。首先,按赛季拆分数据;然后,对每个赛季的 win_loss 列应用累积均值函数;最后,将结果合并回一个 xts 对象。
我们已为您准备了自定义的 cummean() 函数,它会先计算累积和,然后再除以参与累积的数值个数。工作区中已提供 redsox_xts 数据,包含 win_loss 列。
本练习是课程的一部分
案例研究:在 R 中分析城市时间序列数据
练习说明
- 使用
split()将redsox_xts数据按赛季(此处为years)拆分。将结果赋给redsox_seasons。 - 使用
lapply()计算每个赛季的累积均值。本练习提供了cummean()函数:它使用cumsum()求和,并结合seq_along()按参与求和的条目数取平均。将结果保存为redsox_ytd。 - 使用
do.call()搭配rbind,把列表输出转换为单个 xts 对象(redsox_winloss),其中包含各赛季全程的胜负平均值。 - 使用
plot.xts()查看2013赛季期间的累积胜负平均值。请保持预写代码中的ylim参数不变。
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Split redsox_xts win_loss data into years
redsox_seasons <- split(___$___, f = "___")
# Use lapply to calculate the cumulative mean for each season
redsox_ytd <- lapply(___, cummean)
# Use do.call to rbind the results
redsox_winloss <- do.call(___, ___)
# Plot the win_loss average for the 2013 season
plot.xts(___["___"], ylim = c(0, 1))