Попытка получить (обратные) кумулятивные суммы в движущемся окне по группе в data.table. Например, из следующих данных я хотел бы получить эти значения в столбце roll_cumsum:
dt = data.table()
dt[, a := seq(1, 10, 1)]
dt[, group := rep(1:2, each = 5)]
dt[, roll_cumsum := c(15, 14, 12, 9, 5, 40, 34, 27, 19, 10)]
Я получил желаемые результаты с помощью приведенного ниже кода, но он довольно медленный для большого набора данных:
partial_sum = function(x) { n <- seq_along(x); cumsum(x)[length(x)] - cumsum(x)[n] + x[n] }
dt[, partial_sum(a), by = group]
Любые предложения, чтобы сделать расчет быстрее? Большое спасибо!