You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R语言中如何通过cut函数自定义分组区间,生成目标分组用于箱线图?

解决R语言cut()分组区间标签调整问题

你当前用cut(60:95, breaks = c(60,64,68,72,76,80,85,90,95))得到的区间是连续左端点形式(比如(64,68]),但你希望后续区间是(65,68](69,72]这类左端点比前一个区间右端点大1的样式。其实对于整数数据来说,(64,68]这个区间实际包含的就是65-68的数值,和你期望的(65,68]范围完全一致——只是标签写法不同。下面分两种情况给出解决方案:

情况1:仅需要修改区间显示标签(推荐)

如果只是想让分组标签显示成你想要的样式,不需要改变实际的分组逻辑,直接自定义labels参数即可:

# 你的原始数据向量
x <- 60:95

# 保留你原来的断点设置
breaks <- c(60, 64, 68, 72, 76, 80, 85, 90, 95)

# 定义你期望的区间标签
custom_labels <- c(
  "(60,64]", "(65,68]", "(69,72]", "(73,76]",
  "(77,80]", "(81,85]", "(86,90]", "(91,95]"
)

# 执行分组并应用自定义标签
grouped_data <- cut(x, breaks = breaks, labels = custom_labels)

# 验证前8个结果
head(grouped_data, 8)

运行后输出的前8个结果是:

[1] <NA>         (60,64]      (60,64]      (60,64]      (60,64]      (65,68]      (65,68]      (65,68]
Levels: (60,64] (65,68] (69,72] (73,76] (77,80] (81,85] (86,90] (91,95]

注:60会被标记为<NA>,因为你的第一个区间是(60,64](左开右闭,不包含60)。如果想把60包含进去,可以把breaks的第一个值改成59,或者添加include.lowest = TRUE参数。

情况2:需要真正调整分组逻辑(不推荐,除非必要)

如果你确实需要让区间的左边界严格从65、69等开始(比如排除64进入下一个区间),可以定义非连续的断点序列:

# 定义非连续断点,每个区间左端点比前一个区间右端点大1
breaks_custom <- c(60, 64, 65, 68, 69, 72, 73, 76, 77, 80, 81, 85, 86, 90, 91, 95)

# 执行分组,保持左开右闭的规则
grouped_data_custom <- cut(x, breaks = breaks_custom, right = TRUE)

# 查看每个区间的计数
table(grouped_data_custom)

不过这种方法会产生空区间(比如(64,65]没有任何数值),后续绘制箱线图时需要额外过滤这些空区间,所以更推荐第一种方法。

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

火山引擎 最新活动