如何在R数据框中创建具有累加总和的列?

累积总和用于确定变量或组的总和,并帮助我们了解该变量或组的值随时间的变化。在创建累积量时,我们必须确保总和与最后一个值的累积和(取决于总和的方向)相同。我们可以使用dplyr包的mutate函数来查找累积值并为其创建列。

示例

请看以下数据帧-

x1 <-1:20
grp <-rep(LETTERS[1:4],each=5)
df <-data.frame(x1,grp)
df

输出结果

x1 grp
1 1 A
2 2 A
3 3 A
4 4 A
5 5 A
6 6 B
7 7 B
8 8 B
9 9 B
10 10 B
11 11 C
12 12 C
13 13 C
14 14 C
15 15 C
16 16 D
17 17 D
18 18 D
19 19 D
20 20 D

创建一个列cumusum,每grp中x1的值的累加总和-

示例

df%>%group_by(grp)%>%mutate(cumusum=cumsum(x1))
# A tibble: 20 x 3
# Groups: grp [4]
x1 grp cumusum

输出结果

<int> <fct> <int>
1 1 A 1
2 2 A 3
3 3 A 6
4 4 A 10
5 5 A 15
6 6 B 6
7 7 B 13
8 8 B 21
9 9 B 30
10 10 B 40
11 11 C 11
12 12 C 23
13 13 C 36
14 14 C 50
15 15 C 65
16 16 D 16
17 17 D 33
18 18 D 51
19 19 D 70
20 20 D 90

让我们看另一个例子-

示例

set.seed(1)
Class <-rep(c("C1","C2","C3","C4","C5"),each=4)
Frequency <-sample(1:100,20)
data <-data.frame(Class,Frequency)
data

输出结果

Class Frequency
1 C1 68
2 C1 39
3 C1 1
4 C1 34
5 C2 87
6 C2 43
7 C2 14
8 C2 82
9 C3 59
10 C3 51
11 C3 85
12 C3 21
13 C4 54
14 C4 74
15 C4 7
16 C4 73
17 C5 79
18 C5 37
19 C5 83
20 C5 97

创建一个列cumumum,其累加值的总和为每个类-

示例

data%>%group_by(Class)%>%mutate(cumusum=cumsum(Frequency))
# A tibble: 20 x 3
# Groups: Class [5]
Class Frequency cumusum

输出结果

<fct> <int> <int>
1 C1 68 68
2 C1 39 107
3 C1 1 108
4 C1 34 142
5 C2 87 87
6 C2 43 130
7 C2 14 144
8 C2 82 226
9 C3 59 59
10 C3 51 110
11 C3 85 195
12 C3 21 216
13 C4 54 54
14 C4 74 128
15 C4 7 135
16 C4 73 208
17 C5 79 79
18 C5 37 116
19 C5 83 199
20 C5 97 296