如何使用dplyr创建使用其自己的滞后值的列

时间:2017-10-10 13:31:18

标签: r dplyr

假设我有以下数据框

c1<- c(1:10)
c2<- c(11:20)
df<- data.frame(c1,c2)

c1  c2
1   11
2   12
3   13
4   14
5   15
6   16
7   17
8   18
9   19
10  20

我想添加一列c3,它是c3(-1)+ c2-c1的总和。例如, 在上面的示例中,预期结果将是:

c1  c2  c3
1   11  0
2   12  10
3   13  20
4   14  30
5   15  40
6   16  50
7   17  60
8   18  70
9   19  80
10  20  90

是否可以使用dplyr执行此操作?我尝试了几种没有成功的方法。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

这适用于cumsum - 累计求和。

c3 = lag(cumsum(c2 - c1), default = 0)

不要将c3视为c3(-1)+ c2 - c1,将其视为c3(n)= sum(从1到n - 1)c2(i) - c1 (ⅰ)

答案 1 :(得分:3)

这会创建列c3。假设第一个条目始终为0,因为没有前面的元素。

df$c3 <- df$c2 - df$c1
df[1,"c3"] <- 0
df$c3 <- cumsum(df$c3)

输出

> df
   c1 c2 c3
1   1 11  0
2   2 12 10
3   3 13 20
4   4 14 30
5   5 15 40
6   6 16 50
7   7 17 60
8   8 18 70
9   9 19 80
10 10 20 90
>