R 按组计算移动平均数

8

我有一个数据框 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


你看过 byzoo::rollmean 吗? - r2evans
可能是重复问题:https://dev59.com/x18e5IYBdhLWcg3wAWcL - VFreguglia
2个回答

12

你可以使用来自的和.

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,它还能正常工作吗? - Reabo
如果存在任何NA值,runMean函数会报错。 - Andrew Chisholm
始终使用 dplyr::mutate 来避免意外结果。 - Jason Goal

4

使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接