#r #loops #sum
Вопрос:
У меня есть что-то вроде следующего фрейма данных в 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)
Ответ №1:
Вы можете использовать cumsum
и равенство, чтобы проверить, нужно ли вам добавлять или вычитать:
df <- data.frame(Seq, Direction, Amount)
df
cumsum(df$Amount * ifelse(df$Direction == "INCOMING", 1, -1))
[1] 500 300 600 200 0
Ответ №2:
Попробуйте этот базовый код 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