Я думаю, что это идеальный шаблон реализации для типов значений.
. В любом случае, поскольку Celsius
неявно конвертируется в / из int
, вы можете определить такие границы:
public const int MinValue = -273;
public const int MaxValue = int.MaxValue;
Однако в действительности нет никакой практической разницы между static readonly
и const
.
Вот попытка: взять копию каждого фрейма данных группы / подгруппы и выполнить перекрестное соединение с данными. Затем он фильтруется, чтобы найти только дни раньше. Это позволяет нам на каждый день рассчитывать все совокупные суммы
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()