Nick - 1 year ago 70
R Question

# Sequentially reduce values in a column in R

I am currently trying to reduce the values in a column by a certain total amount, until that amount reaches zero. For example, in the data frame created by this code:

``````df = data.frame(matrix(0,nrow=10,ncol=2))
colnames(df) <- c("AccountNumber", "BuyAmount")
df\$AccountNumber <- seq(1:10)
df\$BuyAmount <- c(35000, 220000, 240000, 0, 195000, 55000, 0, 280000, 65000, 105000)

>df
1              1     35000
2              2    220000
3              3    240000
4              4         0
5              5    195000
6              6     50000
7              7         0
8              8    280000
9              9     65000
10            10    105000
``````

I am trying to reduce the nonzero values in the BuyAmount column by 5000 at a time, running along the column and reducing the value of overbuy by 5000 each time. After the first run through the loop, df should look like so:

``````>df
1              1     30000
2              2    215000
3              3    235000
4              4         0
5              5    190000
6              6     45000
7              7         0
8              8    275000
9              9     60000
10            10    100000
``````

And the value of overbuy should be reduced by 40000 to 460000. I would like this loop to continue to run over these values until overbuy reaches 0. In theory, df would end as

``````>df
1              1         0
2              2    150000
3              3    170000
4              4         0
5              5    130000
6              6         0
7              7         0
8              8    210000
9              9         0
10            10     35000
``````

once overbuy reaches 0. My current attempt is:

``````while(overbuy > 0){
for(1 in 1:10){
}
}
``````

Any help would be appreciated!

I think this works, but it's not elegant and I might not have fully understood your goal. If not, let me know and I'll fix this.

EDITED:

``````while(overbuy > 0){
for(i in 1:10){