如何在R语言中缩写数据框物种名并保留第二部分
物种名缩写处理方案
你的问题出在正则表达式的写法上:(?<=.).*$会匹配首字母之后的所有字符并替换为空,自然只留下首字母。要保留种加词,需要用捕获组分别提取属名首字母和种加词,再重新拼接。
方法1:Base R 直接赋值
使用sub()配合捕获组,精准替换属名部分:
df$species2 <- sub("^(\\w)\\w+\\s(.*)$", "\\1. \\2", df$species)
- 正则解释:
^(\\w):捕获属名的第一个字母\\w+\\s:匹配属名剩余的字母和后面的空格(.*)$:捕获空格后的所有内容(即种加词)\\1. \\2:将捕获的首字母加.,再拼接种加词
方法2:dplyr::mutate 生成新列
如果你习惯用tidyverse语法,直接用mutate():
library(dplyr) df <- df %>% mutate(species2 = sub("^(\\w)\\w+\\s(.*)$", "\\1. \\2", species))
测试示例:
输入:"Abies bornmuelleriana"
输出:"A. bornmuelleriana"
内容的提问来源于stack exchange,提问作者Tristan
相关产品推荐
相关产品推荐

