如何用ifelse()结合is.na()在mutate()中为泰坦尼克数据集创建年龄组变量
解决泰坦尼克数据集年龄分组(含NA值处理)的问题
嘿,这个需求很好实现,我们可以通过嵌套ifelse()或者更清晰的case_when()来完成,核心就是把is.na(age)的判断放在最优先的位置,直接把NA值归为adult。
方法一:嵌套ifelse()实现
这是最直接的写法,先处理NA的情况,再区分儿童和成人:
library(dplyr) # 假设你的数据集叫titanic_data titanic_data <- titanic_data %>% mutate(child_or_adult = ifelse( is.na(age), # 首先检查年龄是否为NA "adult", # NA的话直接标记为adult ifelse(age < 18, "child", "adult") # 非NA的话,按年龄判断 ))
方法二:用case_when()提升可读性
如果以后要扩展更多年龄分组,嵌套ifelse()会变得混乱,推荐用dplyr的case_when(),它的分支逻辑更清晰:
titanic_data <- titanic_data %>% mutate(child_or_adult = case_when( is.na(age) ~ "adult", # 优先处理NA值 age < 18 ~ "child", # 年龄小于18的标记为child TRUE ~ "adult" # 剩下的所有情况(年龄≥18且非NA)都标记为adult ))
两种方法都能完美满足你的需求:所有age为NA的乘客都会被归类为adult,不会被忽略,同时正常的年龄值也能正确分组。
内容的提问来源于stack exchange,提问作者Reeza
相关产品推荐
相关产品推荐

