You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于子组计算十分位数并应用于全数据集的实现方法

解决方案

步骤1:提取group1的十分位数分桶边界

先从group1的数据中计算出划分十分位数的临界值,用quantile()函数提取0%、10%、20%……100%的分位数,得到11个边界值(对应10个分桶):

# 获取group1的value列,计算十分位数切点
group1_quantiles <- df %>%
  filter(subgroup == "group1") %>%
  pull(value) %>%
  quantile(probs = seq(0, 1, 0.1), na.rm = TRUE)

步骤2:将分桶规则应用到整个数据集

用cut()函数把全量数据的value按照上面得到的边界划分成10组,再转换为1-10的数字标签:

df <- df %>%
  mutate(
    decile = cut(
      value,
      breaks = group1_quantiles,
      labels = 1:10,
      include.lowest = TRUE  # 确保最小值被纳入第一个分桶
    ) %>% as.integer()  # 将因子类型转换为整数
  )

可选验证

可以对比group1直接用ntile()的结果和本方法的结果(当数据量不是10的整数倍时,两者分桶逻辑会有细微差异,但核心分类规则一致):

check <- df %>%
  filter(subgroup == "group1") %>%
  mutate(decile_ntile = ntile(value, 10)) %>%
  select(decile, decile_ntile)

# 查看分桶结果的匹配情况
table(check$decile, check$decile_ntile)

补充说明

  • quantile()的na.rm=TRUE用于处理缺失值,可根据你的数据实际情况调整。
  • cut()的include.lowest=TRUE避免最小的value值因边界问题被分到分桶外产生NA。

内容的提问来源于stack exchange,提问作者upabove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:50:10