给出的数据是虚构的,实际上它们更复杂
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))
有任何想法吗?
我们可以使用min和max来设置边界并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)