使用dplyr rename_with重命名列时补零变为空格的异常原因查询
问题原因
该异常是原代码中sprintf格式符使用不规范导致的跨环境差异:
- 原代码使用
%02s作为格式化参数,其中s标识输入为字符串类型,0前缀补零的规则仅对数值类格式符(如d代表整数)生效,对字符串输入的补零行为不属于R的标准定义。 - 原解决方案的运行环境对字符串类型的
%02s做了兼容处理,会自动补零;而你的Windows环境下,字符串输入的%02s会默认用空格填充到指定长度,因此出现了Col_a_ 1这类带空格的列名。
修复代码
将匹配到的数字转为整数,使用数值类格式符%02d即可实现全环境通用的补零效果:
df %>% rename_with(~str_replace(., '\\d+', function(m) sprintf('%02d', as.integer(m))), starts_with('Col'))
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

