R语言cut函数分位数分组求助:按40%、85%分位数划分低中高组
问题分析与修正方案
你的代码核心问题有两个:
- 分位数选取错误:用
seq(0,1,by=.40)得到的是0%、40%、80%、100%分位数,和需求的40%、85%分位数不匹配 - 区间规则不符合要求:
right=TRUE会让低组包含40%分位数,且未覆盖极值范围(比如低于最小值、高于最大值的数值)
修正后的代码
# 计算目标分位数 q40 <- quantile(df_XX$sales, probs = 0.4, na.rm = TRUE) q85 <- quantile(df_XX$sales, probs = 0.85, na.rm = TRUE) # 按规则分组 sales_cat <- cut( df_XX$sales, breaks = c(-Inf, q40, q85, Inf), labels = c("低", "中", "高"), right = FALSE, # 左闭右开,确保低组不含40%分位数 ordered = TRUE, na.rm = TRUE )
代码逻辑说明
breaks = c(-Inf, q40, q85, Inf):用-Inf和Inf覆盖所有销售额数值,避免出现未被分组的极值right = FALSE设置区间为左闭右开,完全匹配你的分组规则:- 低组:
(-Inf, q40)→ 40%分位数以下(不含该分位数) - 中组:
[q40, q85)→ 介于低组和高组之间的数值 - 高组:
[q85, Inf)→ 85%分位数及以上
- 低组:
- 若你需要高组不含85%分位数,只需将
right改为TRUE,此时高组区间为(q85, Inf)
内容的提问来源于stack exchange,提问作者HRCNE
相关产品推荐
相关产品推荐

