R脚本实现按Vertical分组的Subvertical AHT Top5与末5排名添加咨询
R代码实现Subvertical排名标注解决方案
1. 调整数据处理逻辑新增排名列
直接修改原有Subvertical数据处理段的代码,在汇总指标后新增排名逻辑即可,调整后代码如下:
data_process.subvertical <- data_process %>% select(DATE, Vertical, Subvertical, AHT, total) %>% dplyr::group_by(DATE, Vertical, Subvertical) %>% dplyr::summarise(AHT = mean(AHT, na.rm = T), total = sum(total)) %>% # 按日期+一级维度Vertical分组,做组内Subvertical排名 dplyr::group_by(DATE, Vertical) %>% # 按AHT升序排名,若需AHT越高排名越靠前,将AHT替换为desc(AHT)即可 dplyr::mutate(aht_rank = dplyr::min_rank(AHT), sub_total = n(), # 取当前分组下Subvertical总数量 rank_label = dplyr::case_when( aht_rank <= 5 ~ paste0("Top", aht_rank), aht_rank >= (sub_total - 4) ~ paste0("末", sub_total - aht_rank + 1), TRUE ~ "其他" )) %>% dplyr::ungroup() %>% # 调整列顺序,将排名标签列放在total列之后,符合需求 dplyr::relocate(rank_label, .after = total)
备注:上述代码默认是按「每月+每个Vertical」维度做排名,如果需要用全时间段的平均AHT做Vertical下的统一排名,只需要将
dplyr::group_by(DATE, Vertical)中的DATE去掉即可。
2. (可选)可视化适配排名逻辑
如果需要在折线图中高亮Top5、末5的Subvertical趋势,可以调整原有绘图函数的代码:
v <- ("Adult") ##change vertical here subvert.aht <- function(Vertical) { filter1 <- data_process.subvertical %>% dplyr::filter(Vertical == !!Vertical) if(nrow(filter1) == 0) { print("无对应Vertical数据") } else { line_chart_cs <- ggplot2::ggplot(filter1, aes(x = DATE, y = AHT, colour = Subvertical, linewidth = rank_label != "其他")) + ggplot2::geom_line() + # 排名列非「其他」的线条加粗显示 scale_linewidth_manual(values = c("TRUE" = 1.2, "FALSE" = 0.6), guide = "none") + scale_x_date(breaks = unique(filter1$DATE)) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black"),legend.position = "bottom" ) + ggtitle(paste("Monthly AHT -", Vertical, "by Subvertical")) return(line_chart_cs) } } subvert.aht(v)
内容的提问来源于stack exchange,提问作者V.Germano
相关产品推荐
相关产品推荐

