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

为何R语言mutate函数仅生成部分年龄分组?对应年龄存在却无分组

问题描述

我希望使用数据中的Age变量创建包含不同年龄段的Age_category变量,执行了以下R代码:

New_Data <- New_Data %>% mutate(Age_category = case_when(New_Data$Age <1 ~ "<1",
        New_Data$Age >=1 & New_Data$Age <=4 ~ "1-4",
        New_Data$Age >4  & New_Data$Age <=9 ~ "5-9",
        New_Data$Age >9  & New_Data$Age <=14 ~ "10-14",
        New_Data$Age >14 & New_Data$Age <=19 ~ "15-19",
        New_Data$Age >19 & New_Data$Age <=24 ~ "20-24",
        New_Data$Age >24 & New_Data$Age <=29 ~ "25-29",
        New_Data$Age >29 & New_Data$Age <=34 ~ "30-34",
        New_Data$Age >34 & New_Data$Age <=39 ~ "35-39",
        New_Data$Age >39 & New_Data$Age <=44 ~ "40-44",
        New_Data$Age >44 & New_Data$Age <=49 ~ "45-49",
        New_Data$Age >49 & New_Data$Age <=54 ~ "50-54",
        New_Data$Age >54 & New_Data$Age <=59 ~ "55-59",
        New_Data$Age >59 & New_Data$Age <=64 ~ "60-64",
        New_Data$Age >64 ~ "65+",
        New_Data$Age == "NULL" ~ "NULL"))

预期Age_category列包含以下分组:

"<1", "1-4","5-9", "10-14", "15-19","20-24", "25-29", "30-34",  "35-39","40-44", "45-49", "50-54", "55-59",
      "60-64", "65+","NULL"

虽然成功创建了Age_category变量,但仅生成了"5-9"、"<1"、"1-4"、"65+"这几个不同分组,数据中存在对应年龄却未生成其他分组,不清楚原因。

问题排查与解决方案

1. 检查Age变量的数据类型

如果Age是字符类型,数值比较操作(比如>9)会因字符排序规则与数值不同而失效,导致中间年龄段的条件无法匹配。

  • 执行以下代码查看变量类型:
    class(New_Data$Age)
    
  • 若结果为character,先转换为数值型(非数字值会转为NA):
    New_Data$Age <- as.numeric(New_Data$Age)
    

2. 修正缺失值判断逻辑

R中表示缺失值的是NA,而非字符串"NULL",原代码中New_Data$Age == "NULL"无法识别真正的缺失值,应改为is.na(Age)。

3. 简化dplyr管道内的变量引用

在mutate函数中无需重复使用New_Data$引用变量,直接使用变量名即可,避免潜在的作用域问题。

修正后的完整代码

New_Data <- New_Data %>% 
  mutate(Age_category = case_when(
    Age < 1 ~ "<1",
    Age >=1 & Age <=4 ~ "1-4",
    Age >4 & Age <=9 ~ "5-9",
    Age >9 & Age <=14 ~ "10-14",
    Age >14 & Age <=19 ~ "15-19",
    Age >19 & Age <=24 ~ "20-24",
    Age >24 & Age <=29 ~ "25-29",
    Age >29 & Age <=34 ~ "30-34",
    Age >34 & Age <=39 ~ "35-39",
    Age >39 & Age <=44 ~ "40-44",
    Age >44 & Age <=49 ~ "45-49",
    Age >49 & Age <=54 ~ "50-54",
    Age >54 & Age <=59 ~ "55-59",
    Age >59 & Age <=64 ~ "60-64",
    Age >64 ~ "65+",
    is.na(Age) ~ "NULL"
  ))

4. 验证结果

执行以下代码查看生成的所有分组,确认是否包含预期类别:

unique(New_Data$Age_category)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 05:39:54