Я хочу суммировать значение на основе индекса и группировки. Это набор данных моей игрушки:
vals<- 1:5
grps <- c(1,1,2,2,2)
dts <- as.Date(c("2020-01-01","2020-01-02","2020-01-03","2020-01-04","2020-01-05"))
dfx <- as_tibble(cbind(vals,grps,dts))
colnames(dfx) <- c("vals","grps","dts")
(rslt <- dfx %>%
mutate(dts = as.Date(dts)) %>%
arrange(dts) %>%
group_by(grps) %>%
mutate(dist = as.numeric(last(dts) - dts)))
Результирующий df выглядит так:
vals grps dts dist
<dbl> <dbl> <date> <dbl>
1 1 1 2020-01-01 1
2 2 1 2020-01-02 0
3 3 2 2020-01-03 2
4 4 2 2020-01-04 1
5 5 2 2020-01-05 0
Я хотел бы получить новую переменную для каждой строки (например, через mutate () ), который представляет собой сводку всех дней в каждой группе ( grps ) для каждой строки, меньшей или такой же, как значение, указанное в индексе ( dist ). Другими словами, я хотел бы получить сводные данные о значениях ( vals ) для каждого дневного интервала до определенного крайнего срока, включая группировку.
Итак, мой желаемый конечный результат будет столбец в моем df ( сумма ):
# A tibble: 5 x 5
# Groups: grps [2]
vals grps dts dist sum
<dbl> <dbl> <date> <dbl> <dbl>
1 1 1 2020-01-01 1 3
2 2 1 2020-01-02 0 2
3 3 2 2020-01-03 2 12
4 4 2 2020-01-04 1 9
5 5 2 2020-01-05 0 5