Вот как вы можете сделать это с помощью петель. Не будет слишком плохо, если ваши данные не слишком велики.
x = data.frame("ID"=1:5, "Name"=c("aa","bb","cc","dd","ee"),"Amount"=c(1500,2000,1000,500,800))
do_that = function(x){
y = x[0,]
r = 0
for (i in 1:NROW(x)){
count = 0
while (x[i,3] > 0){
r = r + 1
y[r,1] = x[i,1]
y[r,2] = x[i,2]
y[r,3] = 0
count = count + 1
if (count <= 2){
d = min(x[i,3], 250)
} else {
d = min(x[i,3], 500)
}
y[r,3] = y[r,3] + d
x[i,3] = x[i,3] - d
}
}
return (y)
}
y = do_that(x)
y
Я даже добавил бонусную строку, которая не кратна 250 или 500.