如何在R中将多个字符串类型变量重编码为数值类型?
问题原因
- 重编码映射与实际数据的取值不匹配:你代码中写的映射值
"Some of the time"和测试数据里实际存在的"Sometimes"不是相同字符串,无法匹配。 - 映射规则不完整:测试数据中还存在
"Never"取值,你没有在recode的参数中为其设置对应赋值,未匹配的取值默认会被转为NA,同时触发警告。 - 赋值规则和预期不符:你需求中要求
"None of the time"赋值为0,但代码中该值对应的赋值为1,不符合你的业务需求。
修复代码
以下示例默认"Never"和"None of the time"同等级赋值为0,"Sometimes"赋值为3,你可以根据实际业务调整对应数值:
兼容旧版dplyr的修改版
library(dplyr) For_Analysis <- For_Analysis%>% mutate_at(c("Q11_1", "Q11_2", "Q11_3"), funs(recode(., "None of the time"=0, "Never" = 0, "Rarely"=2, "Sometimes"=3, "Often"=4, "All of the time"=5)))
推荐现行dplyr写法(dplyr 1.0.0及以上版本支持,避免弃用函数提示)
library(dplyr) For_Analysis <- For_Analysis %>% mutate(across(c(Q11_1, Q11_2, Q11_3), ~ recode(.x, "None of the time" = 0, "Never" = 0, "Rarely" = 2, "Sometimes" = 3, "Often" = 4, "All of the time" = 5)))
注意事项
如果不确定数据集里所有的分类取值,可以先运行以下代码查看所有出现过的分类值,再对应补全映射规则,避免遗漏:
unique(unlist(For_Analysis[,c("Q11_1","Q11_2","Q11_3")]))
内容的提问来源于stack exchange,提问作者George Richardson
相关产品推荐
相关产品推荐

