R每组移动平均值

问题描述 投票:1回答:2

我有一个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))

我需要的是resultLevel的移动平均线。

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

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是不正确的,因为来自不同resultsLevels现在混合在移动平均线中。

如何根据resultLevel自动计算移动平均线?

r moving-average
2个回答
5
投票

你可以使用group-bymutatedplyr

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

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
© www.soinside.com 2019 - 2024. All rights reserved.