R语言中gsub无法替换列名内?、+、(等特殊字符该如何处理?
问题原因
?、(、+属于正则表达式元字符,在gsub默认的正则匹配模式下有特殊语法含义,不会被识别为普通字符做匹配,因此直接写无法替换。
解决方法
方法1:对元字符加双反斜杠转义
R的正则语法中,要匹配元字符本身需要加\\做转义,修改你失败的三行代码即可:
# 替换问号 colnames(d) <- gsub("\\?", "", colnames(d)) # 替换左括号 colnames(d) <- gsub("\\(", "", colnames(d)) # 替换加号 colnames(d) <- gsub("\\+", "", colnames(d))
方法2:启用fixed参数纯字符串匹配
给gsub添加fixed = TRUE参数,会将匹配规则当成普通字符串处理,不需要转义元字符:
colnames(d) <- gsub("?", "", colnames(d), fixed = TRUE) colnames(d) <- gsub("(", "", colnames(d), fixed = TRUE) colnames(d) <- gsub("+", "", colnames(d), fixed = TRUE)
方法3:一次性批量移除所有不需要的特殊字符
不需要写多行gsub,用正则字符类匹配所有要移除的字符,一行代码完成处理:
# 方括号内可填入所有你需要移除的字符 colnames(d) <- gsub("[?\\-/()+.,]", "", colnames(d))
如果需要连空格一起移除,把空格也加到方括号内即可。
处理后效果
运行上述代码后的数据框列名将变为:
Aryl Sulfatm 433_hydroxy acid 2 2acid 4 acid 1acetamido2 sulfate acid 1 1 6 5 8 3 2 2 7 6 9 4
如果需要生成更规范的无空格列名,可将空格也加入替换列表,或直接使用janitor包的clean_names()函数一键处理。
内容的提问来源于stack exchange,提问作者user11916948
相关产品推荐
相关产品推荐

