Вот попытка: взять копию каждого фрейма данных группы / подгруппы и выполнить перекрестное соединение с данными. Затем он фильтруется, чтобы найти только дни раньше. Это позволяет нам на каждый день рассчитывать все совокупные суммы
DF %>%
group_by(group, subgroup) %>%
mutate(day = row_number(), J = TRUE) %>%
nest() %>%
arrange(group, subgroup) %>%
mutate(data = map(data, function(d) {
inner_join(d, transmute(d, x = day, v = subgroup_value, J), by = "J") %>%
filter(day >= x) %>%
mutate(x = day - x + 1) %>%
arrange(day, x) %>%
group_by(date, group_value, date, subgroup_value) %>%
mutate(vv = cumsum(v),
vv = ifelse(vv >= group_value, vv, NA),
xx = ifelse(!is.na(vv), x, NA)) %>%
group_by(date, group_value, day, subgroup_value) %>%
summarise(x = min(xx, na.rm = TRUE), v = min(vv, na.rm = TRUE))
})) %>%
unnest()
У меня нет D5 здесь для высказывания, но я едва помню, что директива устаревшая появилась только на D6.
Что касается исключения StackOverflow, я думаю, что оно удерживается от использования, потому что только для среды выполнения Delphi для повышения его.
Править: На основе агрегата всех ответов EStackOverflow удерживался от использования в Delphi 6, когда ключевое слово Устаревшее было представлено.
Точно так же, как в.NET, Вы наклоняетесь, действительно ловят исключение StackOverflow, к чему Вы восстанавливаетесь? Ваш код является, скорее всего, неверным, если необходимо поймать тот :)
Я просто проверил свой Delphi 6, и EStackOverflow уже удержан от использования. У меня нет доступа к более старым версиям Delphi здесь.
Я не могу помочь Вам с почему или возможная замена.
Это должно только отговорить меня бросать EStackOverflow в свой собственный код?
Что еще более важно, я думаю, что это означает, что Вы не должны разрабатывать код для зависимости от него бросаемый в будущие версии.
В Delphi 5 это еще не удерживается от использования.
править: На самом деле, в Delphi 5, 'удержанном от использования', не зарезервированное слово.