R语言使用across+recode批量重编码数值变量报错求助
问题解决:批量重编码多列报错的修复
错误原因分析
- 列选择语法错误:
across()支持直接使用tidyselect语法(如contains()),不需要嵌套vars(),vars()会返回quosures类型,导致列下标类型不匹配报错。 - 数据类型不匹配:数据集的列是数值型,但
recode中使用了字符串作为键值(如"1" = "7"),类型不一致会导致重编码逻辑失效。 - 代码语法不完整:
mutate()函数末尾缺少闭合括号,属于语法遗漏问题。
修正后的代码
方案1:保持数值型重编码(推荐,匹配原数据类型)
test <- tibble ( a_test = c(7,6,5,4), b_test = c(7,7,5,3), c_test = c(7,3,7,5), d_test = c(7,7,7,7) ) test %>% mutate(across(contains('test'), recode, 1 = 7, 2 = 6, 3 = 5, 4 = 4, 5 = 3, 6 = 2, 7 = 1))
方案2:转换为字符型后重编码(若需输出字符结果)
test %>% mutate(across(contains('test'), ~recode(as.character(.), "1" = "7", "2" = "6", "3" = "5", "4" = "4", "5" = "3", "6" = "2", "7" = "1")))
结果说明
运行修正后的代码后,所有包含test的列会完成反向编码:原数值7转为1、6转为2、5转为3,以此类推,符合预期的重编码逻辑。
内容的提问来源于stack exchange,提问作者joh_anna
相关产品推荐
相关产品推荐

