月度流量数据按指定百分比生成表格的实现方法
生成月度流量超越概率对应值表格的R实现
核心思路
针对已完成月度分组的流量数据集,提取指定超越概率对应的各月流量值,转换为宽表格式后用gt包美化输出,匹配需求中的表格样式。
步骤与代码实现
1. 加载依赖包
使用dplyr处理数据,gt制作格式化表格:
library(dplyr) library(gt)
2. 预处理数据
取消原有分组,避免后续操作受分组限制:
dat_ungrouped <- dat %>% ungroup()
3. 定义目标超越概率
按需设置需要提取的超越概率值,示例采用需求中的0.02、0.05、0.08:
target_exceedance <- c(0.02, 0.05, 0.08)
4. 提取各月对应超越概率的流量值
按月份分组,匹配每个目标超越概率对应的流量值(此处采用匹配最接近的超越概率记录,若需精确插值可替换逻辑):
exceedance_table <- dat_ungrouped %>% group_by(month) %>% summarise( across(all_of(target_exceedance), ~{ # 匹配最接近目标超越概率的流量值 closest_idx <- which.min(abs(exceedance.wm - .x)) discharge.cfs[closest_idx] }) ) %>% # 转换为宽表:超越概率为行,月份为列 tidyr::pivot_longer(-month, names_to = "exceedance", values_to = "discharge") %>% tidyr::pivot_wider(names_from = month, values_from = discharge) %>% # 将超越概率转为百分比格式 mutate(exceedance = paste0(as.numeric(exceedance)*100, "%")) %>% rename(Percentage = exceedance)
5. 用gt包美化表格
调整列名、格式,生成符合需求的表格:
exceedance_table %>% gt() %>% tab_header(title = "月度流量超越概率对应值") %>% # 将月份数字转为英文缩写 cols_label( `1` = "Jan", `2` = "Feb", `3` = "Mar", `4` = "Apr", `10` = "Oct", `11` = "Nov", `12` = "Dec" ) %>% # 格式化流量值为整数 fmt_number(columns = -Percentage, decimals = 0)
扩展说明
- 若需更精确的流量值,可将匹配逻辑替换为线性插值:
approx(exceedance.wm, discharge.cfs, xout = .x)$y
- 直接修改
target_exceedance中的数值,即可适配任意超越概率的需求。
内容的提问来源于stack exchange,提问作者FungalRicky
相关产品推荐
相关产品推荐

