Я хотел бы рассчитать скользящую сумму или скользящий счет по двум столбцам индекса в R. В следующей таблице данных есть столбец, который показывает сумму продажи и два столбца даты. Я хотел бы создать 4-й столбец, который дает мне количество дат в столбце index2, которые меньше даты в столбце index1, и я также хочу иметь 5-й столбец, который дает мне сумму продаж, связанных с теми, которые подсчитаны в четвертом столбец.
sales_vec <- c(2, 4, 3, 5)
index1_vec <- as.Date("2019-08-29") + c(0, 2, 5, 6)
index2_vec <- as.Date("2019-08-29") + c(-5, 2, 1, -3)
company <- tibble(
sales = sales_vec,
index1 = index1_vec ,
index2 = index2_vec
)
> print(company)
# A tibble: 4 x 3
sales index1 index2
<dbl> <date> <date>
1 2 2019-08-29 2019-08-24
2 4 2019-08-31 2019-08-31
3 3 2019-09-03 2019-08-30
4 5 2019-09-04 2019-08-26
Мой результат должен выглядеть так:
# A tibble: 4 x 5
sales index1 index2 rollingCount rollingSum
<dbl> <date> <date> <dbl> <dbl>
1 2 2019-08-29 2019-08-24 2 7
2 4 2019-08-31 2019-08-31 3 10
3 3 2019-09-03 2019-08-30 4 14
4 5 2019-09-04 2019-08-26 4 14
Первая строка RollingCount равна 2, потому что в столбце index2 есть две даты, которые меньше, чем первая строка index1, и сумма продаж, связанных с этими двумя строками, равна 2 + 5 = 7, что отображается в первой строке RollingSum. Вторая строка RollingCount равна 3, потому что в столбце index2 есть три даты, которые меньше, чем вторая строка index1, а сумма продаж, связанных с этими тремя строками, составляет 2 + 5 + 3 = 10, что отображается во второй строке. ряд прокаткиСум. И так далее.
Я знаком с семейством команд слайдов для выполнения скользящих вычислений, но я борюсь с этой задачей, так как в ней есть два столбца индекса.
company <- company %>% mutate( rollingCount = slide_dbl (.x = index1, ~{sum(index2 < .x)}), rollingSales = slide_dbl (.x = index1, ~{sum(sales[index2 < .x])}), )
03.07.2020