带有 if 语句的累积和循环

Cumulative sum loop with if statement

我在 R 中有类似以下数据框的内容。我想创建一个循环,以第一个传入金额作为初始余额创建一个累积和,然后在传出金额时减去,在金额时添加正在传入。任何想法如何在 R 中执行此操作将不胜感激。

Seq<-c(1,2,3,4,5)
Direction<-c("INCOMING","OUTGOING", "INCOMING", "OUTGOING", "OUTGOING")
Amount<-c(500,200,300,400,200)
df<-cbind(Seq, Direction, Amount)

您可以使用 cumsum 和等式来检查是否必须加或减:

df <- data.frame(Seq, Direction, Amount)
df

cumsum(df$Amount * ifelse(df$Direction == "INCOMING", 1, -1))
[1] 500 300 600 200   0

试试这个基本的 R 代码

transform(
    df,
    bal = cumsum(Amount * (2 * (Direction == "INCOMING") - 1))
)

这给出了

  Seq Direction Amount bal
1   1  INCOMING    500 500
2   2  OUTGOING    200 300
3   3  INCOMING    300 600
4   4  OUTGOING    400 200
5   5  OUTGOING    200   0