如何用正则表达式修改DataFrame列名?移除.zip.及之前内容
解决DataFrame列名截取问题
直接给正确的R代码:
colnames(df) <- gsub(".*\\.zip\\.", "", colnames(df))
为什么之前的写法不对?
- 第一个正则
.*\zip/:\z是正则里匹配字符串结尾的元字符,完全不符合需求,还多了个多余的/,根本匹配不到.zip.;而且R里字符串的反斜杠需要双写,单写\z本身语法就有问题。 - 第二个正则
*.zip:*是量词,必须跟在某个字符或组后面,单独写*属于语法错误;就算改成.*\.zip,也只去掉了.zip前面的内容,没处理.zip后面的那个点,最后会得到.name、.region这种带前置点的列名。
正则逻辑说明
.*\\.zip\\.的含义:
.*:匹配任意数量的任意字符(贪婪模式,会匹配到最后一个.zip.之前的所有内容,刚好符合你的列名结构)\\.zip\\.:匹配字面量.zip.,因为.在正则里是匹配任意字符的元字符,所以必须用\\转义,R里字符串要额外转义一次反斜杠,所以写两个\\。
内容的提问来源于stack exchange,提问作者Log On
相关产品推荐
相关产品推荐

