如何用Base R将两行变量重编码代码简化为一行?
用Base R简化性别变量重编码为一行代码
你可以用以下几种Base R的方式将两行重编码代码简化为一行:
方法一:嵌套ifelse结合%in%
这种方式逻辑清晰,还能保留未匹配到的原始值:
ibr.sub$SEX <- ifelse(ibr.sub$SEX %in% c("1", "3"), "-1", ifelse(ibr.sub$SEX %in% c("2", "4"), "1", ibr.sub$SEX))
- 用
%in%替代多个==和|,让条件判断更简洁 - 外层判断变量值是否属于
c("1", "3"),满足则赋值"-1" - 不满足则进入内层判断,若属于
c("2", "4")则赋值"1" - 都不满足时保留原变量值,避免出现意外的
NA
方法二:利用match做索引映射
如果变量的类别固定且明确,这种方式更简洁:
ibr.sub$SEX <- c("-1", "-1", "1", "1")[match(ibr.sub$SEX, c("1", "3", "2", "4"))]
- 先构建结果向量
c("-1", "-1", "1", "1"),与匹配目标c("1", "3", "2", "4")一一对应 match()返回每个SEX值在目标向量中的位置,再用该位置索引结果向量完成重编码- 注意:如果
SEX存在不在c("1","2","3","4")中的值,会返回NA,若要保留原数值可补充ifelse处理:
ibr.sub$SEX <- ifelse(ibr.sub$SEX %in% c("1","2","3","4"), c("-1", "-1", "1", "1")[match(ibr.sub$SEX, c("1","3","2","4"))], ibr.sub$SEX)
内容的提问来源于stack exchange,提问作者wooden05
相关产品推荐
相关产品推荐

