两个条件的累加和

GrB*_*rBa 3 r dplyr

给出的数据是虚构的,实际上它们更复杂

t <- data.frame(v1=c(265, -268, 123, 58, 560, 56, -260, 40, 530, -895, 20))
Run Code Online (Sandbox Code Playgroud)

我想计算具有两个限制值的累积和:0和500。如果累积总数超过500,则必须保留500。如果累积总数变为负数,则必须存储0。得到的结果如下:

     v1 sum.c
1   265   265
2  -268     0
3   123   123
4    58   181
5   560   500
6    56   500
7  -260   240
8    40   280
9   530   500
10 -895     0
11   20    20
Run Code Online (Sandbox Code Playgroud)

Excel中的公式如下:=if(B1+A2<0; 0; if(B1+A2>500; 500; B1+A2))

有任何想法吗?

Tho*_*ing 5

我们可以使用minmax来设置边界并Reduce迭代向量

> v1 <- c(265, -268, 123, 58, 560, 56, -260, 40, 530, -895, 20)

> Reduce(function(x, y) min(max(x + y, 0), 500),v1, accumulate = TRUE)
 [1] 265   0 123 181 500 500 240 280 500   0  20
Run Code Online (Sandbox Code Playgroud)