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

如何按指定分位数将样本划分为非均匀类别?

按自定义非均匀分位数区间划分样本(基于cut函数的分组实现)

要实现按0-20分位数、21-60分位数、61-100分位数这种非均匀区间划分,核心是先算出分组内对应分位数的阈值,再用cut()函数基于这些阈值切割变量。直接看修改后的可复用代码:

library(dplyr)
set.seed(1)
df <- tibble(
  V1 = round(runif(1000, min=1, max=1000)),
  V2 = as.factor(round(runif(1000, min=1, max=3))),
  V3 = as.factor(round(runif(1000, min=1, max=10)))
)

# 按V2、V3分组,计算自定义分位数区间并划分
df <- df %>% 
  group_by(V2, V3) %>%
  mutate(
    # 计算分组内的20%和60%分位数阈值
    q20 = quantile(V1, 0.2, na.rm = TRUE),
    q60 = quantile(V1, 0.6, na.rm = TRUE),
    # 用cut划分区间,指定breaks和自定义标签
    custom_quantile = cut(
      V1,
      breaks = c(-Inf, q20, q60, Inf),  # 用-Inf和Inf确保覆盖所有极端值
      labels = c("0-20分位数", "21-60分位数", "61-100分位数"),
      include.lowest = TRUE  # 确保最小值被纳入第一个区间
    )
  ) %>%
  ungroup()  # 按需取消分组,不影响后续操作的话也可以保留分组状态

关键细节说明

  • quantile(V1, c(0.2, 0.6)):在每个分组内精准计算对应分位数的临界值,这是实现非均匀区间的核心。
  • cut()的breaks参数:用-Inf和Inf兜底,避免因为样本极值超出阈值范围而出现NA值。
  • include.lowest = TRUE:确保样本中的最小值被正确归入第一个区间,不会出现边界值遗漏的问题。

验证区间分布(可选)

如果要确认每个分组内的区间占比是否符合预期,可以运行以下代码:

df %>% 
  count(V2, V3, custom_quantile) %>%
  group_by(V2, V3) %>%
  mutate(占比 = n / sum(n))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:10:25