移动平均可以使时间序列变平滑,是典型的有序计算问题,其基本算法是:将N个连续的时间序列成员作为一个集合,计算该集合的平均值,并逐项推移该集合。下面用一个例子来说明R计算移动平均的方法。

案例描述:

数据框sales有两个字段:日期和当日销售额,需要计算三日移动平均值。具体算法是:求出前一日、当日、后一日的销售额平均值,并逐日推移。部分源数据如下:

    代码:

filter(sales$Amount/3, rep(1, 3))

    计算结果:

代码解读:

R语言可以用函数filter计算移动平均值,代码简短,非常方便。

函数filter虽然很方便,但初学者却不易理解。比如sales$Amount/3的本意是将Amount字段中的当前值除以3,但用在filter函数里却能将前后三个值相加再除以三。表达式rep(1,3)的值为[1,1,1],用在这里却能指定取数范围。另外,filter的函数名和参数名中既没有“平均”,也没有“移动”,许多R语言开发者都不知道它可以用来计算移动平均值。

事实上,函数filter是个通用的线性过滤器,它的作用不止计算移动平均值这么简单。其完整的函数说明如下:filter(x, filter, method= c("convolution", "recursive"),sides = 2,circular = FALSE, init)。

如果想改动一下算法,代码就会更难理解,比如要计算当日、前一日、前两日这三天的移动平均值,不能写成:filter(sales$Amount/3,rep(0,2)),而应该是filter(sales$Amount/3,rep(1,3), sides = 1)。


总结: R语言可以计算移动平均值,但代码难理解。

第三方解决方案

本案例也可以用Python、集算器、Perl等语言来实现。和R语言一样,这几种语言都可以进行数据的统计分析,都可以计算移动平均值,下面简单介绍Python和集算器的解决方案。

    Python(pandas)

Pandas是Python的第三方库函数,其基本数据类型仿照R中的数据框,具有很强的结构化数据处理能力,目前最新版本是0.14。代码如下:

pandas.stats.moments.rolling_mean(sales["Amount"],3)

rolling_mean这个函数名一目了然,即使刚接触pandas的开发者也能轻易查到这个函数,rolling_mean的用法也很简洁,第一个参数是被计算的序列,第二个参数是N日移动平均值中的N。

    集算器

集算器擅长以敏捷语法自由表达业务逻辑,其相对位置表达式可以方便地解决有序计算中的难题。代码所示:

sales.(Amount{-1,1}.avg())

代码中的{-1,1}表示相对区间,即前一日和后一日之间的三天。可以看到,使用相对区间可以直观地计算移动平均值,而且更加灵活。比如同样改动算法:计算当日、前一日、前两日这三天的移动平均值,集算器只需将区间改为{-2,0}。

相对区间是个集合,集算器还可以表达相对位置的元素,比如销售增长额可以用sales(Amount -Amount[-1])来直观计算,而R语言和Python就没这么好理解。

转载于:https://blog.51cto.com/report5/1563155

R语言计算移动平均的方法相关推荐

  1. R计算移动平均的方法

    移动平均可以使时间序列变平滑,是典型的有序计算问题,其基本算法是:将 N 个连 续的时间序列成员作为一个集合, 计算该集合的平均值, 并逐项推移该集合. 下面用一个例 子来说明 R 计算移动平均的方法 ...

  2. R语言:计算各种距离

    R语言:计算各种距离 MATLAB 版本的 http://blog.csdn.net/sinat_26917383/article/details/52101425 PYTHON版本的 http:// ...

  3. r语言 计算模型的rmse_直播丨R语言与作物模型高级应用实战技术应用

    随着基于过程的作物生长模型(Process-based Crop Growth Simulation Model)的发展,R语言在作物生长模型和数据分析.挖掘和可视化中发挥着越来越重要的作用.想要成为 ...

  4. R语言编程的高效方法

    R语言编程的高效方法 R语言编程的高效方法 高效编程之细节知识点 并行计算 1.查看核数 2.可以使用并行计算的场景 3.Parellel 包 R语言编程的高效方法 学习资料来源: datacamp ...

  5. R语言--计算各种距离

    MATLAB 版本的 http://blog.csdn.net/sinat_26917383/article/details/52101425 PYTHON版本的 http://book.2cto.c ...

  6. R语言计算线性回归的最小二乘估计

    R语言计算线性回归的最小二乘估计 全称:线性回归的最小二乘法(OLS回归),ordinary least square,字面翻译:普通最小平方: 内容:包括三个部分:简单线性回归.多项式回归.多元线性 ...

  7. R语言计算资本资产定价模型(CAPM)中的Beta值和可视化

    原文链接:http://tecdat.cn/?p=22588 今天我们将计算投资组合收益的CAPM贝塔.这需要拟合一个线性模型,得到可视化,从资产收益的角度考虑我们的结果的意义. 简单的背景介绍,资本 ...

  8. R语言计算Roger遗传距离

    R语言计算遗传距离 遗传距离是什么,怎样衡量 遗传距离的计算 Roger遗传距离 解决过程 关于一些弯路 遗传距离是什么,怎样衡量 遗传距离指个体.群体或种之间用DNA序列或等位基因频率来估计的遗传差 ...

  9. R语言计算带有绝对值符号的函数偏导并输出偏导结果

    R语言计算带有绝对值符号的函数偏导并输出导数结果 求偏导后的导数表达式网上已有众多教程,这里主要对导数结果的输出及含有绝对值符号的的函数偏导运算进行方法阐述 对函数f=x*|y|*(z-x)求对x.y ...

最新文章

  1. Exception in thread main java.io.IOException: (null) entry in command string: null chmod 0700 E:\t
  2. python单位根检验看结果_Python ADF 单位根检验 如何查看结果的实现
  3. 从零开始学习Oracle—安装及删除
  4. STM32F4 HAL 库开发报错:Hal_StatusTypeDef is undefined的解决办法
  5. 173. 二叉搜索树迭代器/94. 二叉树的中序遍历/145. 二叉树的后序遍历/98. 验证二叉搜索树
  6. 服务器上多个php,php – 在多个服务器上扩展cronjobs
  7. c语言计算圆周率的第100位,JavaScript实现计算圆周率到小数点后100位的方法示例...
  8. 删除或复制文件提示:文件名无效或太长/目标路径太长/找不到该项目
  9. 拍摄视频,真的帧率越高越好吗?
  10. Python实现测量平差数据处理
  11. 新办的卡为什么显示无服务器,为什么插入卡后显示无服务,有时有有时又没有?...
  12. 机器学习----PyTorch入门
  13. Go全局唯一ID选型集合
  14. 读书笔记_Unity3d 游戏优化2
  15. java 使用*打印图形(菱形、平行四边形、三角形)
  16. Cesium平台构建诗词地图故事
  17. (网络视频监控)面试题12
  18. 我玩辅助是在给你做视野,不是给你的坟头看风水
  19. 电子计算机是机电一体化产品,关于机电一体化产品所有包括的范围
  20. 操作系统学习-练习题个人总结(九)

热门文章

  1. 更新nvidia驱动或更新包导致无法开机
  2. HTML class类名企业命名参考
  3. 编码器是什么?STM32编码器接口及应用编程
  4. java对象数组和Array List
  5. Zebra 条码打印机应用开发实践
  6. 两千内给力的大屏手机(一)
  7. ARM和X86、X86和X64、Intel和AMD、CPU和GPU介绍
  8. php 数组练习题,8个PHP数组面试题
  9. java读写word框架_[原创]java读写word文档,完美解决方案
  10. 2021年广东省安全员B证第三批(项目负责人)考试题库及广东省安全员B证第三批(项目负责人)复审考试