PU
Size: a a a
PU
A
update.packages(checkBuilt = TRUE, ask = FALSE)
ЕТ
IS
dt <- tibble(
date = c("01.01.2021", "15.01.2021", "06.01.2021", "18.01.2021", "20.01.2021"),
amount = c(1000, -500, 800, -550, -800)
) %>%
mutate_at("date", dmy) %>%
setDT()
# даты должны быть сортированы!
2. Собственно, считаем ===
# инициализируем аккумулятор
accu_dt <- dt[amount < 0, .(accu = cumsum(amount), date)]
# гоняем в цикле возникновения обязательств по аккумулятору,
# детектируем дату переход через 0, фиксируем дату
# data.table можно менять по ссылке, этим и пользуемся!!
ff <- function(x){
# для сумм, ушедших в погашение ставим NA
accu_dt[, accu := accu + x][accu > 0, accu := NA]
# возвращаем дату погашения
head(na.omit(accu_dt)$date, 1)
}
repay_dt <- dt[amount > 0] %>%
.[, repayment_date := ff(amount), by = date]
Теперь есть существенные возражения? Это обобщенный пример, сделан только один пользователь, но они все обрабатываются независимо и, возможно, параллельно.ЮМ
%>%
Да и «лямбда» сокращение функций, на мой взгляд, только усложняет читаемость кода.PU
ДВ
IS
ЮМ
PU
ЮМ
D
D
IY
[, ]
ЕТ
IY
ДВ
DK
ДВ
ДВ