如何正确在dplyr中使用recode?多列重编码报错求解
解决dplyr中across+recode重编码的报错问题
错误原因
你的数据列是数值型,但调用recode时用了字符串格式的键(比如"1" = "7"),这会导致recode无法匹配数值输入,同时触发参数不匹配的报错——对于数值型输入,recode的键应该直接写数值,不需要加引号,否则会被识别为无效参数。
解决方案
方案1:用正确的recode语法适配数值型输入
如果需要保持输出为数值型(实现7→1、6→2的反转计分),直接使用数值作为键和值:
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(.x, 1 = 7, 2 = 6, 3 = 5, 4 = 4, 5 = 3, 6 = 2, 7 = 1)))
如果需要输出为字符型,将值改为字符串即可:
test %>% mutate(across(contains("test"), ~ recode(.x, 1 = "7", 2 = "6", 3 = "5", 4 = "4", 5 = "3", 6 = "2", 7 = "1")))
方案2:更简洁的反转计分写法
由于你的需求是固定的7分制反转计分(最终得分=8-原始得分),可以完全不用recode,直接用算术运算实现,代码更简洁高效:
test %>% mutate(across(contains("test"), ~ 8 - .x))
这个方法不仅避免了recode的参数错误问题,还大幅简化了代码逻辑。
内容的提问来源于stack exchange,提问作者joh_anna
相关产品推荐
相关产品推荐

