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

在R语言中使用recode函数重编码年龄变量未达预期结果

解决R语言中年龄变量区间分箱的问题

嘿,你踩了dplyr::recode的一个常见坑——这个函数是用来做精确值映射的,不是处理数值区间的!你写的'1:30'是字符串形式的区间标识,但你的age变量应该是数值型的,没有任何年龄值会和这些字符串精确匹配,所以recode就默认把原年龄值直接返回给ageband3了,这就是结果不符合预期的原因。

下面给你两种最常用的正确解决方案:

方案1:用dplyr::case_when(推荐,直观灵活)

case_when专门用来处理多条件的分支判断,非常适合区间分箱的场景:

library(dplyr)

# 对data_2017_18添加分箱后的ageband3变量
data_2017_18 <- data_2017_18 %>%
  mutate(ageband3 = case_when(
    # 定义每个区间对应的分箱值
    age >= 1 & age <= 30 ~ 1L,
    age >= 31 & age <= 50 ~ 2L,
    age >= 51 & age <= 99 ~ 3L,
    # 处理超出上述范围的年龄(比如0岁或100+),返回NA
    TRUE ~ NA_integer_
  ))

方案2:用基础R的cut()函数

如果不想加载dplyr,基础R的cut()函数也能快速完成分箱,只需把结果转换为整数即可:

# 用cut划分区间,再转为整数类型
data_2017_18$ageband3 <- as.integer(cut(
  data_2017_18$age,
  breaks = c(0, 30, 50, 99),  # 划分的区间边界:(0,30], (30,50], (50,99]
  labels = c(1L, 2L, 3L)      # 给每个区间分配对应整数
))

验证结果

执行完上面的代码后,你可以用交叉表验证分箱是否正确:

table(data_2017_18$age, data_2017_18$ageband3)

这样就能得到你预期的1、2、3三个分箱类别啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:07:26