R语言计算quantiles分位差及POE指标可视化代码咨询
R语言计算POE指标分位数差实现方案
首先确保你已将原始数据导入为R数据框,命名为poe_df,列对应为R、Year、Time、POE、VALUE。
方案1:tidyverse生态实现(推荐)
步骤1:数据预处理
# 加载依赖包 library(dplyr) # 将POE列的百分号格式转为数值 poe_df <- poe_df %>% mutate(POE_num = as.numeric(sub("%", "", POE)))
步骤2:分组计算分位数差
默认按年份、时间分组计算两种常用分位数差:90%分位范围(95%分位值减10%分位值)、四分位距(75%分位值减25%分位值),可按需调整分组维度和分位数区间。
quantile_diff <- poe_df %>% group_by(Year, Time) %>% summarise( # 90%分位范围 range_90 = VALUE[POE_num == 95] - VALUE[POE_num == 10], # 四分位距IQR IQR = VALUE[POE_num == 75] - VALUE[POE_num == 25], # 可选保留中位数做参考 median = VALUE[POE_num == 50], .groups = "drop" ) # 输出计算结果 print(quantile_diff)
步骤3:分位数差可视化(可选)
library(ggplot2) ggplot(quantile_diff, aes(x = Time, group = 1)) + geom_ribbon(aes(ymin = median - range_90/2, ymax = median + range_90/2), fill = "lightblue", alpha = 0.3) + geom_ribbon(aes(ymin = median - IQR/2, ymax = median + IQR/2), fill = "steelblue", alpha = 0.5) + geom_line(aes(y = median), color = "darkblue", linewidth = 1) + labs(title = "POE指标分位数差时序表现", y = "POE值", x = "时间") + theme_minimal()
方案2:基础R实现(无需额外依赖)
# 预处理POE列为数值 poe_df$POE_num <- as.numeric(sub("%", "", poe_df$POE)) # 生成唯一分组 groups <- unique(poe_df[,c("Year", "Time")]) # 遍历分组计算分位数差 quantile_diff <- do.call(rbind, lapply(1:nrow(groups), function(i) { cur_y <- groups$Year[i] cur_t <- groups$Time[i] sub_df <- poe_df[poe_df$Year == cur_y & poe_df$Time == cur_t,] data.frame( Year = cur_y, Time = cur_t, range_90 = sub_df$VALUE[sub_df$POE_num == 95] - sub_df$VALUE[sub_df$POE_num == 10], IQR = sub_df$VALUE[sub_df$POE_num == 75] - sub_df$VALUE[sub_df$POE_num == 25], median = sub_df$VALUE[sub_df$POE_num == 50] ) }))
注意事项
- 若数据包含多个
R维度的分组,只需在分组条件中新增R列即可,比如tidyverse方案中改成group_by(R, Year, Time) - 如需自定义分位数差的区间,修改对应代码块中匹配的
POE_num数值即可
内容的提问来源于stack exchange,提问作者Steven
相关产品推荐
相关产品推荐

