R 按组别划分的累积平均数

R 按组别划分的累积平均数,r,R,我想根据下表中每个索引的名称计算跟踪平均GPA。 例如,在指数9中,我想得到指数3、6、9中C的平均GPA,同样,对于A和B,我想得到指数6中C的平均GPA,从指数3和6中。tapply一个人无法解决我的问题,因为我希望每行都有一个值 什么是干净的方法 Index Name GPA 1 A 5 2 B 6 3 C 7 4 A 5 5 B 6 6 C 6 7 A 7 8 B 6 9

我想根据下表中每个索引的名称计算跟踪平均GPA。 例如,在指数9中,我想得到指数3、6、9中C的平均GPA,同样,对于A和B,我想得到指数6中C的平均GPA,从指数3和6中。tapply一个人无法解决我的问题,因为我希望每行都有一个值

什么是干净的方法

Index Name GPA
1     A    5
2     B    6
3     C    7
4     A    5
5     B    6
6     C    6
7     A    7
8     B    6
9     C    3
:

产生:

  Name GPA  cum_avg
1    A   5 5.000000
2    B   6 6.000000
3    C   7 7.000000
4    A   5 5.000000
5    B   6 6.000000
6    C   6 6.500000
7    A   7 5.666667
8    B   6 6.000000
9    C   3 5.333333

使用
dplyr

g <- data.frame(Name=rep(c("A","B","C"),3),
            GPA=c(5,6,7,5,6,6,7,6,3))

g %>%
group_by(Name) %>%
mutate(cumu = lag(cummean(GPA), n = 0))
g%
分组单位(名称)%>%
突变(cumu=滞后(cummean(GPA),n=0))
输出:

Source: local data frame [9 x 3]
Groups: Name [3]

Name   GPA     cumu
<fctr> <dbl>    <dbl>
1      A     5 5.000000
2      B     6 6.000000
3      C     7 7.000000
4      A     5 5.000000 
5      B     6 6.000000
6      C     6 6.500000
7      A     7 5.666667
8      B     6 6.000000
9      C     3 5.333333
来源:本地数据帧[9 x 3]
分组:名称[3]
名称GPA cumu
150万美元
20B66000000
3C77000000
45000000美元
56000000
6 C 6.500000
7 A 7 5.666667
86000000美元
9 C 3 5.333333

我希望我的GPA能有这么高,你是在找
tapply(dat$GPA,INDEX=dat$Name,FUN=mean)
?(假设您的数据存储在
dat
)中。在索引6中,我想从索引3和6中得到C的平均GPA。在每个名字的每个索引中,我想要一个新的尾随平均值。所以你们基本上想要一个分组的累积平均值?
g <- data.frame(Name=rep(c("A","B","C"),3),
            GPA=c(5,6,7,5,6,6,7,6,3))

g %>%
group_by(Name) %>%
mutate(cumu = lag(cummean(GPA), n = 0))
Source: local data frame [9 x 3]
Groups: Name [3]

Name   GPA     cumu
<fctr> <dbl>    <dbl>
1      A     5 5.000000
2      B     6 6.000000
3      C     7 7.000000
4      A     5 5.000000 
5      B     6 6.000000
6      C     6 6.500000
7      A     7 5.666667
8      B     6 6.000000
9      C     3 5.333333