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

R语言dplyr重编码年龄组匹配分组时生成NA值的解决方法

代码存在的3个核心问题
  • 语法错误:case_when()的最后一个判断语句末尾多了冗余逗号,R会将该段代码识别为不完整表达式,导致除最开头的"0-14"相关匹配外,其余判断逻辑全部失效
  • 标签不匹配:case_when()中输出的高龄组标签为"95 y más años",但因子水平里写的是"95 y más",缺失了 años后缀;同时85-89岁组的因子水平误写为"85,89",将连接符横杠错打为逗号,标签不一致的分组在转因子时会被判定为无效值,返回NA
  • 参数名错误:转换因子时指定水平的参数为levels,代码中错写为level(缺失末尾的s),会导致因子水平设置失效,进一步引发值匹配异常
修正后的可运行代码
pob <- pob %>% 
  mutate(
    Edad1 = dplyr::case_when(
      Edad..grupos.quinquenales. %in% c("0-4 años", "5-9 años", "10-14 años") ~ "0-14",
      Edad..grupos.quinquenales. %in% c("15-19 años", "20-24 años", "25-29 años") ~ "15-29",
      Edad..grupos.quinquenales. %in% c("30-34 años", "35-39 años") ~ "30-39",
      Edad..grupos.quinquenales. %in% c("95-99 años", "100 años y más") ~ "95 y más",
      # 其余原5岁间隔分组直接保留原值,无需逐行写判断
      TRUE ~ gsub(" años", "", Edad..grupos.quinquenales.)
    ),
    Edad1 = factor(
      Edad1,
      levels = c("0-14", "15-29", "30-39", "40-44", "45-49", 
                 "50-54", "55-59", "60-64", "65-69", "70-74", 
                 "75-79", "80-84", "85-89", "90-94", "95 y más")
    )
  )

注:用%in%合并同目标分组的判断逻辑,再加TRUE ~ 原值兜底保留无需调整的中间年龄组,比逐行写等值判断更简洁,也能减少手写标签出错的概率。代码中通过gsub()统一去掉了原分组标签自带的 años后缀,保证所有输出标签和因子水平完全匹配,从根源避免NA值生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:39:36