在R中对年龄变量分组时输出TRUE/FALSE/NA的问题咨询
错误原因
- 核心错误:
mutate()内使用了相等判断符==而非赋值符=,代码实际执行的是「判断原Age列与case_when返回的分类字符串是否相等」的逻辑,最终输出自然只有TRUE/FALSE/NA三类布尔值。 - 冗余调用:使用
%>%管道传入数据框后,无需再加metsother$前缀调取列,直接写列名即可,额外添加前缀可能引发作用域匹配异常。 - 条件逻辑错误:第三个分组的条件写为
Age >= 61 & Age >= 80,仅能匹配80岁及以上样本,不符合61-80岁分组的预期;同时未处理18岁以下、80岁以上的样本,会生成NA值。
修正后代码
agecategory <- metsother %>% mutate(age_group = case_when( Age >= 18 & Age <= 40 ~ "Category 1", Age >= 41 & Age <= 60 ~ "Category 2", Age >= 61 & Age <= 80 ~ "Category 3", TRUE ~ "其他" # 兜底匹配所有不满足上述条件的样本,可根据需求调整分类或提前过滤样本 ))
注意事项
如果仅需要分析18-80岁区间的样本,可以在执行mutate()前添加filter(Age >= 18 & Age <= 80)步骤,过滤无效样本后再做分组。
内容的提问来源于stack exchange,提问作者kirellos said
相关产品推荐
相关产品推荐

