【问题标题】:R Moving-average per groupR 每组移动平均
【发布时间】:2018-01-02 22:41:29
【问题描述】:

我有一个 data.frame ABC_Score

ABC_Score <- data.frame(Level = c("A", "A", "A", "B", "B", "C", "C", 
"C", "C"), result = c(2, 3, 3, 7, 9, 18, 20, 17, 20))

我需要的是每个Levelresult 的移动平均值。

目前我有以下脚本的移动平均线。

install.packages("TTR")
library(TTR)

`ABC_Score$MA` <- runMean(ABC_Score$result, 2)

      Level result   MA
    1     A      2   NA
    2     A      3  2.5
    3     A      3  3.0
    4     B      7  5.0
    5     B      9  8.0
    6     C     18 13.5
    7     C     20 19.0
    8     C     17 18.5
    9     C     20 18.5

但在这里我需要指定将计算移动平均值的行数 (result)。在此示例中,2 不正确,因为来自不同 Levelsresults 现在混合在移动平均线中。

如何根据Level 自动计算result 上的移动平均值?

【问题讨论】:

标签: r moving-average


【解决方案1】:

您可以使用来自dplyrgroup_bymutate

library(TTR)
library(dplyr)
ABC_Score <- data.frame(
    Level = c("A", "A", "A", "B", "B", "C", "C", "C", "C"), 
    result = c(2, 3, 3, 7, 9, 18, 20, 17, 20))
ABC_Score %>% group_by(Level) %>% mutate(ra = runMean(result, 2))
# A tibble: 9 x 3
# Groups:   Level [3]
   Level result    ra
  <fctr>  <dbl> <dbl>
1      A      2    NA
2      A      3   2.5
3      A      3   3.0
4      B      7    NA
5      B      9   8.0
6      C     18    NA
7      C     20  19.0
8      C     17  18.5
9      C     20  18.5

【讨论】:

  • 如果result 列中有 NA,它会起作用吗?
  • 如果有任何NA 值,runMean 函数会报错。
【解决方案2】:

在具有因子水平的单个向量上使用函数是 ave 函数的作用:

 ABC_Score$MA <- with(ABC_Score, ave(result, Level, FUN=function(x) 
                     TTR::runMean(x, n=2)) )
> ABC_Score
  Level result   MA
1     A      2   NA
2     A      3  2.5
3     A      3  3.0
4     B      7   NA
5     B      9  8.0
6     C     18   NA
7     C     20 19.0
8     C     17 18.5
9     C     20 18.5

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2016-05-16
    • 2020-05-19
    • 2017-04-17
    • 2023-03-12
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 2018-10-21
    相关资源
    最近更新 更多