如何基于含产品跨市场启动周的R DataFrame生成每周累计总量?
计算每周累计产品-市场启动总量
看起来你需要计算每周的累计启动总量——也就是到每一周为止,已经完成启动的产品-市场组合总数对吧?我来给你一步步拆解实现方法,用dplyr就能轻松搞定:
步骤1:准备示例数据
先把你提供的示例数据转成可复用的R DataFrame,方便后续测试:
library(dplyr) df <- tibble::tibble( Prod_ID = c(11044913000, 11044913000, 11159402003, 11159402003, 11159402003, 11159410010, 11159410010, 11159410010, 11159410010, 11159410010, 11159410014, 11159410014), Market_Name = c("PHOENIX, AZ", "WEST TEX/NEW MEX", "PORTLAND,OR", "SEATTLE/TACOMA", "SPOKANE", "PORTLAND,OR", "SALT LAKE CITY", "SEATTLE/TACOMA", "SPOKANE", "WEST TEX/NEW MEX", "PORTLAND,OR", "SEATTLE/TACOMA"), START_WEEK = c(1397, 1206, 1188, 1188, 1195, 1186, 1190, 1186, 1187, 1197, 1198, 1239) )
步骤2:计算每周新增启动数
首先统计每个周有多少个新的产品-市场组合启动:
weekly_new <- df %>% count(START_WEEK, name = "new_launches")
这里count会自动按START_WEEK分组,统计每组的行数(也就是该周的新增启动数)。
步骤3:生成完整周序列并计算累计总量
为了避免中间周数断档,我们先生成从最小启动周到最大启动周的完整周序列,再补全无新增的周,最后计算累计值:
# 生成完整周范围 all_weeks <- tibble(START_WEEK = seq(min(df$START_WEEK), max(df$START_WEEK), by = 1)) # 左连接补全数据,计算累计总量 weekly_cumulative <- all_weeks %>% left_join(weekly_new, by = "START_WEEK") %>% # 把无新增的周的new_launches设为0 mutate(new_launches = replace_na(new_launches, 0)) %>% # 计算累计求和 mutate(cumulative_total = cumsum(new_launches)) # 查看结果前几行 head(weekly_cumulative)
运行后你会得到一个包含START_WEEK(周数)、new_launches(当周新增启动数)、cumulative_total(到该周的累计启动总数)的DataFrame。
扩展:按产品/市场分组计算累计
如果需要按产品或市场单独计算累计启动量,可以用分组操作。比如按产品计算每周该产品已启动的市场数:
product_cumulative <- df %>% group_by(Prod_ID) %>% # 先获取每个产品的启动周范围 mutate(product_min_week = min(START_WEEK), product_max_week = max(START_WEEK)) %>% ungroup() %>% # 生成每个产品的完整周序列 tidyr::crossing(START_WEEK = seq(min(df$START_WEEK), max(df$START_WEEK), by = 1)) %>% group_by(Prod_ID, START_WEEK) %>% # 统计到当前周为止已启动的市场数 summarise(cumulative_markets = sum(START_WEEK.y <= START_WEEK.x), .groups = "drop") %>% rename(START_WEEK = START_WEEK.x) %>% arrange(Prod_ID, START_WEEK)
内容的提问来源于stack exchange,提问作者Rnovice
相关产品推荐
相关产品推荐

