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

如何在R语言cut函数中指定断点,将18及以上标记为Adult?

如何正确用cut函数将年龄分为Minor和Adult(≥18为Adult)

嘿,这个问题我之前也踩过坑!你用cut(ages, breaks=2)的时候,R会默认把数据分成等距的两个区间,而且cut函数默认是左开右闭的区间规则(也就是(a,b]),这就导致18刚好被划到左边的区间里,被标记成了Minor。要精准控制阈值,咱们得手动指定断点,而不是让R自动分割。

方法一:手动指定断点并调整区间闭合方向

这是最贴合你需求的方式,直接把18作为分界点,通过right=FALSE参数让区间变成左闭右开([a,b)):

ages <- c(17, 18, 16, 20, 22, 23)
age_group <- cut(ages, breaks = c(-Inf, 18, Inf), labels = c('Minor', 'Adult'), right = FALSE)
  • 解释:right=FALSE时,第一个区间是[-Inf, 18),对应小于18的Minor;第二个区间是[18, Inf),对应大于等于18的Adult,这样18就会被正确分到Adult组里。

验证一下结果:

> age_group
[1] Minor Adult Minor Adult Adult Adult
Levels: Minor Adult

方法二:保持默认区间规则,调整断点阈值

如果你不想修改right参数(默认是right=TRUE,左开右闭),可以把断点设为17,这样(17, Inf]就包含了所有≥18的年龄:

age_group <- cut(ages, breaks = c(-Inf, 17, Inf), labels = c('Minor', 'Adult'))

这个方法也能得到正确结果,但不如第一种直观,毕竟我们的阈值是18,直接用18作为断点更清晰。

方法三:不用cut,用ifelse+factor更直白

对于这种简单的二分类场景,其实可以不用cut,直接用ifelse配合factor函数实现,代码更易懂:

age_group <- factor(ifelse(ages >= 18, "Adult", "Minor"))

这个方法逻辑直接,一眼就能看懂“≥18标记为Adult,否则为Minor”,适合快速实现需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:45:38