假设我有以下数据框
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执行此操作?我尝试了几种没有成功的方法。任何建议都将不胜感激。
答案 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
>