如何在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
相关产品推荐
相关产品推荐

