現在、列の値を特定の合計量だけ減らしてその量がゼロになるまで減らそうとしています。たとえば、このコードで作成されたデータフレームに:Rの列の値を順次減らす
df = data.frame(matrix(0,nrow=10,ncol=2))
colnames(df) <- c("AccountNumber", "BuyAmount")
overbuy <- 500000
df$AccountNumber <- seq(1:10)
df$BuyAmount <- c(35000, 220000, 240000, 0, 195000, 55000, 0, 280000, 65000, 105000)
>df
AccountNumber BuyAmount
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
私は、列に沿って走ると5000それぞれによってoverbuyの値を小さく、一度に5000によってBuyAmount列内の非ゼロ値を減らすためにしようとしています時間。ループを通る最初の実行後、DFはそうのようになります。overbuy 0に達するまで
>df
AccountNumber BuyAmount
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
そしてoverbuyの値は460000.に40000によって減少させるべきである私は、これらの値の上に実行し続けるために、このループをしたいと思います。
while(overbuy > 0){
for(1 in 1:10){
ifelse(df$BuyAmount[i] != 0, df$BuyAmount[i] <- df$BuyAmount[i] - 5000, "")
overbuy <- overbuy - 5000
}
}
任意の助けをいただければ幸いです。理論的には、DFは
>df
AccountNumber BuyAmount
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
が一度overbuy 0.私の現在の試行がある達すると終わるだろう!
if(df$BuyAmount[i] <= 0) next
、見えますか?あなたのコードをよりエレガントにすることができる 'dplyr'の部分は間違いありませんが、大きな画像を理解するのに役立ちます。 –私は現在、各口座の購入金額を教えてくれるコードを持っていますが、通常、丸め誤差のために数千ドルオーバーシュートしています(各注文は$ 5000単位でしか置けません)。私は体系的にこのオーバーシュートを減らして、私が各口座で過剰買い上げをしてデビットに入れないようにしたい。上記の極端な例を使用して、ある値が0になると、それは残りの反復から除外されるべきであることを示しました。 – Nick
5000で割り切れる数になるまで価格を下げるほうがより有用でしょうか?そうすれば、価値を上回らずに最も近い入札価格になります。 –