如何使用dplyr向R数据框添加累积列? [英] How to add a cumulative column to an R dataframe using dplyr?

查看:159
本文介绍了如何使用dplyr向R数据框添加累积列?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有与这篇文章相同的问题,但我想使用 dplyr



使用R数据框,例如:

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

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

没有 dplyr 上一篇文章所接受的解决方案是:

  df $ csum<  -  ave(df $ value,df $ id,FUN = cumsum)


解决方案

像这样?

  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))

或者如果您使用 dplyr 'sp iping运算符:

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

在这两种情况下都有结果:

 来源:本地数据框[15 x 4] 
组:id

id小时值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


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)

解决方案

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), cumsum=cumsum(value))

Or if you use the dplyr's piping operator:

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

Result in both cases:

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

这篇关于如何使用dplyr向R数据框添加累积列?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆