累积总和主要用于数据的描述性分析,但有时我们可能需要在理解移动总和的时间序列分析时对其进行计算,但这非常少见。如果我们在R数据框中有一个因子列,那么一起找到所有因子水平的累加总和就没有意义,我们必须找到每个水平的累加总和。使用ave函数可以很容易地做到这一点。
请看以下数据帧-
set.seed(15) x1<-as.factor(sample(LETTERS[1:3],20,replace=TRUE)) x2<-rpois(20,5) df1<-data.frame(x1,x2) df1
输出结果
x1 x2 1 A 5 2 C 6 3 B 2 4 B 3 5 A 8 6 B 5 7 A 5 8 A 3 9 C 5 10 A 2 11 C 5 12 B 6 13 A 2 14 A 5 15 A 4 16 C 6 17 B 8 18 A 5 19 B 8 20 B 3
查找x1的不同值的x2值的累积和-
df1$CumSum_x2_based_on_x1<-ave(x2,x1,FUN=cumsum) df1
输出结果
x1 x2 CumSum_x2_based_on_x1 1 A 5 5 2 C 6 6 3 B 2 2 4 B 3 5 5 A 8 13 6 B 5 10 7 A 5 18 8 A 3 21 9 C 5 11 10 A 2 23 11 C 5 16 12 B 6 16 13 A 2 25 14 A 5 30 15 A 4 34 16 C 6 22 17 B 8 24 18 A 5 39 19 B 8 32 20 B 3 35
让我们看另一个例子-
Group<-sample(c("GRP1","GRP2","GRP3","GRP4"),20,replace=TRUE) Response<-sample(1:10,20,replace=TRUE) df2<-data.frame(Group,Response) df2
输出结果
Group Response 1 GRP2 1 2 GRP3 1 3 GRP2 8 4 GRP2 1 5 GRP2 4 6 GRP1 7 7 GRP1 8 8 GRP1 2 9 GRP1 1 10 GRP1 1 11 GRP4 3 12 GRP3 9 13 GRP4 4 14 GRP1 9 15 GRP4 5 16 GRP2 8 17 GRP2 10 18 GRP3 5 19 GRP3 8 20 GRP3 8
查找不同组值的响应值的累积和
df2$CumSum_of_GroupLevels<-ave(Response,Group,FUN=cumsum) df2
输出结果
Group Response CumSum_of_GroupLevels 1 GRP2 1 1 2 GRP3 1 1 3 GRP2 8 9 4 GRP2 1 10 5 GRP2 4 14 6 GRP1 7 7 7 GRP1 8 15 8 GRP1 2 17 9 GRP1 1 18 10 GRP1 1 19 11 GRP4 3 3 12 GRP3 9 10 13 GRP4 4 7 14 GRP1 9 28 15 GRP4 5 12 16 GRP2 8 22 17 GRP2 10 32 18 GRP3 5 15 19 GRP3 8 23 20 GRP3 8 31