如何去除R数据框指定列字符串开头的数字编号?
R语言去除数据框列开头数字编号前缀的实现方法
处理R数据框df2的y列时,需移除该列每个字符串开头的「任意长度数字+.+空格」编号前缀,仅保留后续目标文本,可直接使用R基础包的正则替换函数实现,无需安装第三方依赖。
具体实现代码
直接对列执行替换操作即可:
df2$y <- sub("^[0-9]+\\. ", "", df2$y)
正则规则说明:
^:锚定字符串起始位置,确保只匹配最开头的前缀,不会误处理文本中段的相似内容[0-9]+:匹配1个及以上连续数字,适配从1位到多位的任意长度编号\\.:匹配编号后紧跟的英文点号和空格,R中正则匹配点号需要用双反斜杠转义(点号本身是正则通配符)
效果验证
用提供的头、尾部样例做测试,输出完全符合预期:
头部样例测试
test_head <- c("1. Neodiprion virginianus", "2. Nepsalus jezoensis", "3. Prochas sp. 2 YYH-2022a", "4. Prochas sp. 1 YYH-2022a", "5. Eccoptopterus sp. 1 CP-2022", "6. Andricus sp. 1 CYS-2022a") sub("^[0-9]+\\. ", "", test_head)
输出结果:
[1] "Neodiprion virginianus" "Nepsalus jezoensis" "Prochas sp. 2 YYH-2022a" [4] "Prochas sp. 1 YYH-2022a" "Eccoptopterus sp. 1 CP-2022" "Andricus sp. 1 CYS-2022a"
尾部样例测试
test_tail <- c("761849. Libellula", "761850. Libellulidae", "761851. Anisoptera", "761852. Odonata", "761853. Euscelis plebejus", "761854. Euscelis") sub("^[0-9]+\\. ", "", test_tail)
输出结果:
[1] "Libellula" "Libellulidae" "Anisoptera" "Odonata" [5] "Euscelis plebejus" "Euscelis"
注意事项
- 用
sub()即可,不需要用gsub():sub()只会替换第一个匹配到的内容,刚好匹配只需要替换开头前缀的需求,执行效率更高 - 该写法不会破坏目标文本内容:因为有起始位置锚定,文本内部的数字、点号、空格(比如样例里的
sp.标识、样本编号后缀)都会完整保留,不会被误删
内容的提问来源于stack exchange,提问作者Pedro Alexander Velasquez Vasc
相关产品推荐
相关产品推荐

