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

如何在RStudio中结合年月列分组年龄?代码报错求助

年龄计算与分组的正确R代码实现

错误原因分析

原代码存在以下问题导致报错:

  • 函数调用名称不匹配:定义的函数是function_age,调用时误写为function_year
  • 列名拼写错误:age$moth应为age$month
  • 缺失值未处理:当year或month存在NA时,if条件无法返回明确的TRUE/FALSE,触发missing value, where TRUE/FALSE is necessary错误
  • 分组名称不匹配:函数返回的under18与目标分组under 18不一致

方案1:修正原函数并处理缺失值

基于你提供的代码逻辑,修正后可正常运行:

# 定义数据收集的截止时间(2024年7月)
current_year <- 2024
current_month <- 7

# 定义年龄分组函数,添加缺失值处理
function_age <- function(year, month, current_year, current_month) {
  # 先判断是否存在缺失值,存在则返回NA
  if (is.na(year) || is.na(month)) {
    return(NA_character_)
  }
  
  # 按出生年月匹配目标分组
  if (year > 2006 || (year == 2006 && month > 7)) { 
    return("under 18")
  } else if (year > 1998 || (year == 1998 && month > 7)) {
    return("18-25")
  } else if (year > 1988 || (year == 1988 && month > 7)) {
    return("26-35")
  } else if (year > 1978 || (year == 1978 && month > 7)) {
    return("36-45")
  } else if (year > 1968 || (year == 1968 && month > 7)) {
    return("46-55")
  } else if (year > 1958 || (year == 1958 && month > 7)) {
    return("56-65")
  } else if (year > 1948 || (year == 1948 && month > 7)) {
    return("66-75")
  } else {
    return("76 and older")
  }
}

# 正确调用函数(修正函数名和列名)
Age_groups <- mapply(function_age, age$year, age$month, 
                     MoreArgs = list(current_year, current_month))

# 将结果转为向量,方便后续合并到数据框
Age_groups <- as.vector(Age_groups)

方案2:使用tidyverse/dplyr实现(更适合论文数据分析)

采用tidyverse语法,代码更简洁易读,且直接在数据框内完成计算与分组:

library(dplyr)

# 定义数据收集的截止时间
current_year <- 2024
current_month <- 7

# 在原数据框中计算年龄并分组,自动处理缺失值
age <- age %>%
  mutate(
    # 计算精确到月的年龄
    exact_age = current_year - year - ifelse(month > current_month, 1, 0),
    # 按目标规则分组
    age_group = case_when(
      is.na(year) | is.na(month) ~ NA_character_,
      exact_age < 18 ~ "under 18",
      between(exact_age, 18, 25) ~ "18-25",
      between(exact_age, 26, 35) ~ "26-35",
      between(exact_age, 36, 45) ~ "36-45",
      between(exact_age, 46, 55) ~ "46-55",
      between(exact_age, 56, 65) ~ "56-65",
      between(exact_age, 66, 75) ~ "66-75",
      exact_age >= 76 ~ "76 and older"
    )
  )

# 提取分组结果
Age_groups <- age$age_group

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 04:26:10