Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
174 views
in Technique[技术] by (71.8m points)

How to add a cumulative column to an R dataframe using dplyr?

I have the same question as this post, but I want to use dplyr:

With an R dataframe, eg:

df <- data.frame(id = rep(1:3, each = 5)
                 , hour = rep(1:5, 3)
                 , value = sample(1:15))

how do I add a cumulative sum column that matches the id?

Without dplyr the accepted solution of the previous post is:

df$csum <- ave(df$value, df$id, FUN=cumsum)
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Like this?

df <- data.frame(id = rep(1:3, each = 5),
                 hour = rep(1:5, 3),
                 value = sample(1:15))

mutate(group_by(df,id), csum=cumsum(value))

Or if you use the dplyr's piping operator:

df %>% group_by(id) %>% mutate(csum = cumsum(value))

Result in both cases:

Source: local data frame [15 x 4]
Groups: id

   id hour value csum
1   1    1     4      4
2   1    2    14     18
3   1    3     8     26
4   1    4     2     28
5   1    5     3     31
6   2    1    10     10
7   2    2     7     17
8   2    3     5     22
9   2    4    12     34
10  2    5     9     43
11  3    1     6      6
12  3    2    15     21
13  3    3     1     22
14  3    4    13     35
15  3    5    11     46

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...