R 中的销售数据聚合

问题描述 投票:0回答:1

我有三个商店的多种产品的每日销售数据。它看起来像这样:

item_id 商店_id 类别_id 部门 ID 日期 事件名称 每日价格
a tx_1 食物 1 2012/12/24 6
a tx_1 食物 1 2012/12/25 圣诞节 6
a tx_1 食物 1 2012/12/26 6
a tx_1 食物 1 2012/12/27 7
a tx_1 食物 1 2012/12/28 7
b tx_1 食物 1 2012/12/24 6
b tx_1 食物 1 2012/12/25 圣诞节 6
b tx_1 食物 1 2012/12/26 6
b tx_1 食物 1 2012/12/27 7
b tx_1 食物 1 2012/12/28 7

我想使用 R 中 lubridate 包中的 Floor_date 将每周四舍五入到星期一日期,然后使用 group_by 并汇总来计算每周平均价格。但是,我希望每周保留 event_name(如果特定一周内有的话)。在 group_by 中包含 event_name 没有帮助,因为一周中的某一天可能有事件,但其他日期可能没有,并且它们会单独分组。假设每周从星期一开始,2012/12/24 是星期一,我该如何实现这一点

item_id 商店_id 类别_id 部门 ID 日期 事件名称 每周平均价格
a tx_1 食物 1 2012/12/24 圣诞节 6.4
b tx_1 食物 1 2012/12/24 圣诞节 6.4
r tidyverse aggregation
1个回答
0
投票

您可以通过过滤掉空事件,然后按 event_name 汇总每周价格并采用其他列中的第一列来实现此玩具示例所需的输出:

library(tidyverse)

filter(df, !is.na(event_name)) |>
  mutate(week_start=floor_date(date, unit = "week", week_start = 1)) |>
  summarise(store_id=first(store_id),
            category_id=first(category_id),
            event_name=first(event_name), 
            dept_id=first(dept_id),
            weekly_avg_price=mean(daiy_price, na.rm=TRUE), .by=c(item_id, week_start))

给予:

# A tibble: 2 × 7
  item_id week_start store_id category_id event_name dept_id weekly_avg_price
  <chr>   <date>     <chr>    <chr>       <chr>        <dbl>            <dbl>
1 a       2012-12-24 tx_1     food        christmas        1                6
2 b       2012-12-24 tx_1     food        christmas        1                6
© www.soinside.com 2019 - 2024. All rights reserved.