不同群体的指数平滑函数

时间:2016-04-07 11:17:43

标签: r

我有一个数据集:

Player <- c('Y','Z','Z','Z','Z','Y','Y','Y','Y','Z','Y','Y','Z','Y','Z','Y','Z','Z','Y','Y','Z','Y','Z','Y','Z','Z','Y')
Team <- c('A','B','A','A','B','A','B','B','A','A','B','B','A','A','A','A','A','A','A','B','B','B','B','A','A','A','A')
Score <- c(5,2,7,3,9,6,3,7,1,7,3,8,3,4,1,9,4,6,3,8,3,4,1,9,4,6,6)
data.frame(Player, Team, Score)

我有一个函数,使用alpha = 0.1执行指数平滑:

fun <- function(x) {
 res <- stats::filter(x * c(1, rep(0.1, length(x) - 1)), 0.9, method = "recursive")
 c(NA, res[-length(res)])}

然后我在不同的组上运行此功能。

EXP <- ave(Score, Player, Team, FUN = fun)
data.frame(Player, Team, Score, EXP)

给出:

Player  Team    Score   EXP
Y       A       5       #N/A            
Z       B       2       #N/A
Z       A       7       #N/A            
Z       A       3       7                
Z       B       9       2
Y       A       6       5
Y       B       3       #N/A
Y       B       7       3
Y       A       1       5.1
Z       A       7       6.6
Y       B       3       3.4
Y       B       8       3.36
Z       A       3       6.64
Y       A       4       4.69
Z       A       1       6.276
Y       A       9       4.621
Z       A       4       5.7484
Z       A       6       5.57356
Y       A       3       5.05890
Y       B       8       3.82400
Z       B       3       2.70000
Y       B       4       4.24160
Z       B       1       2.73000
Y       A       9       4.85301
Z       A       4       5.616204
Z       A       6       5.454584
Y       A       6       5.267709

但是我有两个问题/要求:

  1. 我不想给每组的第一行提供NA,而是希望给出观察值x。

  2. 当一个分组只有一行时,我再次希望它能给出观察值x。

  3. 通过这两个修正案,这可以作为期望的结果(我在底部添加了一行子集):

    Player  Team    Score   Exp Smooth
    Y       A       5       5           
    Z       B       2       2
    Z       A       7       7           
    Z       A       3       7                
    Z       B       9       2
    Y       A       6       5
    Y       B       3       3
    Y       B       7       3
    Y       A       1       5.1
    Z       A       7       6.6
    Y       B       3       3.4
    Y       B       8       3.36
    Z       A       3       6.64
    Y       A       4       4.69
    Z       A       1       6.276
    Y       A       9       4.621
    Z       A       4       5.7484
    Z       A       6       5.57356
    Y       A       3       5.05890
    Y       B       8       3.82400
    Z       B       3       2.70000
    Y       B       4       4.24160
    Z       B       1       2.73000
    Y       A       9       4.85301
    Z       A       4       5.616204
    Z       A       6       5.454584
    Y       A       6       5.267709
    B       B       4       4
    

    有没有办法改变这个功能呢?任何帮助表示赞赏!

0 个答案:

没有答案