@ Вклад TobKei велик, вам просто нужно немного изменить структуру своего набора данных, чтобы достичь того, что вам нужно. По сути, вы должны иметь значения каждой категории в качестве переменной, чтобы иметь возможность генерировать еженедельную сумму без единого числа. Возможно, вы захотите попробовать следующее:
library(tidyverse)
library(dplyr)
library(lubridate)
sum_output <- dataset %>%
mutate(week = week(date)) %>%
spread(., category, amount) %>%
group_by(week) %>%
summarise(accomodation_week_sum = sum(Accomodation),
discount_store_week_sum= sum(`Discount Store`),
Petrol_week_sum=sum(`Petrol Station`),
shopping_week_sum= sum(Shopping))
На данный момент это то же самое число, поскольку у вас нет больше наблюдений за ту же неделю, но в конечном итоге, если у вас будет больше, group_by()
вернет вам одно сумма в неделю.
ОБНОВЛЕНИЕ : в случае, если у вас есть сотни категорий, которые вы, очевидно, не хотите вводить по отдельности, должно работать следующее:
library(tidyverse)
library(dplyr)
library(lubridate)
sum_output <- dataset %>%
mutate(week = week(date)) %>%
split(.$category) %>%
lapply(., group_by, week) %>%
lapply(., summarise, week_sum_amount=sum(amount)) %>%
bind_rows(., .id = "week_sum_amount") %>%
data.frame(check.names = FALSE)
Основным дополнением является split()
, которое разделит все ваши категории в разных фреймах данных в одном списке. Список данных.