如何使用dplyr将累积列添加到R数据帧?

Rac*_*ole 40 r dataframe dplyr

我和这篇文章有同样的问题,但我想用dplyr:

使用R数据帧,例如:

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

如何添加与id匹配的累积和列?

没有上一篇文章dplyr的公认解决方案是:

df$csum <- ave(df$value, df$id, FUN=cumsum)
Run Code Online (Sandbox Code Playgroud)

Ste*_*son 67

像这样?

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

mutate(group_by(df,id), cumsum=cumsum(value))
Run Code Online (Sandbox Code Playgroud)

或者如果您使用dplyr的管道操作员:

df %>% group_by(id) %>% mutate(cumsum = cumsum(value))
Run Code Online (Sandbox Code Playgroud)

结果在两种情况下:

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

   id hour value cumsum
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
Run Code Online (Sandbox Code Playgroud)

  • @RacingTadpole不。如果您想在整个表中使用“ cumsum”,请不要将“ group_by”放在第一位。 (2认同)