在R语言中使用dplyr::rename_all精确匹配team.开头列重命名的方法
解决方案
要实现仅替换**列名开头为team.(字面量,包含点号)**的列名,需要修正正则表达式,避免.作为通配符匹配任意字符。具体实现如下:
正则规则调整:使用
^team\\.作为匹配条件^:锚定字符串开头,确保只匹配列名最起始的部分team\\.:用\\.转义点号,匹配字面量的team.,而非正则中默认的任意单个字符
结合
dplyr的rename_with(rename_all已被弃用)完成重命名:
library(dplyr) # 创建目标数据框 zed = data.frame(teamAbb = c('A', 'B'), team.abb = c('C', 'D')) # 精确匹配重命名 zed %>% rename_with(~ sub("^team\\.", "", .x))
运行后输出结果:
teamAbb abb 1 A C 2 B D
补充说明
- 用
sub代替gsub更高效,因为我们只需要替换开头的一次匹配,sub仅处理第一个匹配项 - 原代码中
gsub('team.', '', .)的问题在于:正则里.会匹配任意单个字符,导致teamAbb中的teamA被误判为team.(.匹配A),最终列名被错误修改为bb
内容的提问来源于stack exchange,提问作者Canovice
相关产品推荐
相关产品推荐

