如何用R data.table语法替换列中多个值(不使用ifelse)
解决data.table中sex列值映射问题(不使用ifelse)
这里有几种不用ifelse()的实现方式,适配data.table的操作风格:
方法1:利用命名向量做映射
先定义一个命名向量,键为原取值,值为目标映射结果,直接通过索引完成批量替换:
library(data.table) # 创建映射向量 sex_map <- c(Male = "M", Female = "F", "" = NA_character_) # 应用映射到dt的sex列 dt[, sex := sex_map[sex]]
方法2:通过factor类型转换实现映射
借助factor()的levels和labels参数指定映射规则,再转回字符类型:
dt[, sex := as.character(factor(sex, levels = c("Male", "Female", ""), labels = c("M", "F", NA)))]
注:如果需要保持列的字符类型,别忘了用as.character()转换因子结果。
方法3:使用replace()函数逐批替换
分三次调用replace(),分别处理不同取值的替换需求:
# 替换Male为M dt[, sex := replace(sex, sex == "Male", "M")] # 替换Female为F dt[, sex := replace(sex, sex == "Female", "F")] # 替换空字符串为NA dt[, sex := replace(sex, sex == "", NA_character_)]
内容的提问来源于stack exchange,提问作者elbord77
相关产品推荐
相关产品推荐

