基于r中观察行值的平均值

时间:2019-07-06 14:27:03

标签: r database dplyr

我正在尝试在excel中复制“ AverageIfs”函数,但经过几个小时的反复讨论,我找不到直接适用于我的问题的解决方案。我有“年”,“队”,“周”和“分数”列,并且我想创建另一个功能,该功能采用当前周之前几周中给定年份中给定团队的平均得分。因此数据框看起来像这样。

df.scores <- data.frame(Year = c(rep(2017, 5), rep(2018, 5)), Team = c(rep("A", 10), rep("B", 10)), Week = rep(c(1:4, 6), 4), Score = 1:20)
df.scores

Year   Team  Week  Score 
<dbl> <fctr> <int> <int>
2017    A    1      1   
2017    A    2      2   
2017    A    3      3   
2017    A    4      4   
2017    A    6      5   
2018    A    1      6   
2018    A    2      7   
2018    A    3      8   
2018    A    4      9   
2018    A    6      10  
2017    B    1      11  
2017    B    2      12  
2017    B    3      13  
2017    B    4      14  
2017    B    6      15  
2018    B    1      16  
2018    B    2      17  
2018    B    3      18  
2018    B    4      19  
2018    B    6      20  

如果年=观察年,团队=观察队,并且周<观察周,我想获得平均值。

例如,如果年份= 2017,团队= B,星期= 3,则我想取第11和12行的平均值

我一直在研究dplyr软件包,但我仍然很陌生。我还尝试制作子集并以此为基础得出平均值,但是它有点太混乱了。 我用dplyr尝试了以下代码:

df.scores %>% group_by(Team, Year, Week) %>% summarise(Avg.score = mean(Score))

但是,这不包括我想纳入的第n-1周的分数。

我不知道如何根据观察行的值进行过滤,而我看到的所有其他问题都是按类别变量而不是数字变量分组的。任何帮助我将不胜感激,因为我已经为此花了几个小时不停地旋转!

编辑:这与累计平均值略有不同,因为我试图获取以前周的平均值,而不仅仅是当前周。我认为这些答案将我引向正确的方向。

第1周实质上将过时,因为之前没有几周可以平均。这是我根据当前答案得到的。这仍然不只是将前几周的平均值作为最初的目标。

library(data.table) 
df <- data.table(df.scores) 
df[df$Week > 1 ,x:=cumsum(Score)/(Week),by=list(Year,Team)]
df

Year Team  Week  Score    x 
<dbl> <fctr> <int> <int> <dbl>
2017    A       1   1   NA
2017    A       2   2   1.000000
2017    A       3   3   1.666667
2017    A       4   4   2.250000
2017    A       5   5   2.800000

我将继续努力以寻求解决方案,任何其他答复领域也将不胜感激!

编辑2:我应该提到实际的“周数”不是按顺序排列的,因此累加和并不总是有效的,我调整了数据集以反映这一点。

0 个答案:

没有答案