You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中提取带前缀姓名的名(First Name)

提取带前缀姓名中的名(First Name)

针对你给出的姓名数据,这里提供几种在R中简便提取名的方法:

首先构造测试数据:

names <- c("Tom", "Tom Turner", "Dr. Tom Turner", "R. Tom Turner", "J Tom Turner", "Jr. Tom Turner")

方法一:使用stringr包(tidyverse生态)

利用正则替换去掉前缀,再提取第一个单词:

library(stringr)

# 定义需要匹配的前缀模式:涵盖Dr.、Jr.、单个大写字母(可带点)加空格
prefix_pattern <- "^(Dr\\.|Jr\\.|[A-Z]\\.?\\s)"
# 移除开头的前缀
cleaned_names <- str_replace(names, prefix_pattern, "")
# 提取第一个单词作为名
first_names <- word(cleaned_names, 1)

运行后first_names结果为:c("Tom", "Tom", "Tom", "Tom", "Tom", "Tom"),符合需求。

如果有其他前缀(如Mr.、Ms.、Prof.),只需扩展prefix_pattern即可,比如:

prefix_pattern <- "^(Dr\\.|Jr\\.|Mr\\.|Ms\\.|Prof\\.|[A-Z]\\.?\\s)"

方法二:Base R原生实现

无需额外包,用gsub和strsplit完成:

# 移除前缀
cleaned_names <- gsub("^(Dr\\.|Jr\\.|[A-Z]\\.?\\s)", "", names)
# 拆分字符串并取第一个元素
first_names <- sapply(strsplit(cleaned_names, "\\s+"), `[`, 1)

方法三:直接正则提取

用str_extract直接匹配目标名,无需先替换:

library(stringr)
first_names <- str_extract(names, "(?:^(?!Dr\\.|Jr\\.|[A-Z]\\.?\\s)[A-Z][a-z]+)|(?<=^(Dr\\.|Jr\\.|[A-Z]\\.?\\s))[A-Z][a-z]+")

注意事项

  • 上述正则默认匹配英文姓名的常规前缀,若有特殊前缀(如"Rev."),只需在模式中添加对应的规则即可。
  • 如果姓名包含中间名(如"Dr. Tom Michael Turner"),上述方法依然会正确提取第一个名(Tom)。

内容的提问来源于stack exchange,提问作者Swaroop Poudel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:15:40