如何用Base R精简多段ifelse代码实现年龄变量重编码?
Base R 一行精简重编码方案
方法一:命名向量映射(可读性优先)
先定义替换规则的命名向量,再一行完成重编码:
# 定义替换规则:旧值作为名称,新值作为对应值 replace_map <- c("4" = 3, "20" = 18, "22" = 24, "26" = 24, "31" = 30) # 一行完成重编码 ibr.sub$Age.recode <- with(ibr.sub, ifelse(age %in% names(replace_map), replace_map[as.character(age)], age))
方法二:完全单行写法(精简优先)
把替换规则直接嵌入代码,无需额外定义变量:
ibr.sub$Age.recode <- with(ibr.sub, ifelse(age %in% c(4,20,22,26,31), c(3,18,24,24,30)[match(age, c(4,20,22,26,31))], age))
说明
- 两种方法都基于Base R原生函数,无需额外加载包
- 命名向量的方式更易维护,后续修改替换值只需调整
replace_map with()函数可以避免重复写ibr.sub$,简化代码
内容的提问来源于stack exchange,提问作者wooden05
相关产品推荐
相关产品推荐

