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

如何在R语言中实现get_first_name函数提取姓名中的名?

R语言提取姓名中名字的实现思路

核心逻辑

目标字符串格式固定为「姓氏, 名字 中间名」,只需剥离逗号及之前的姓氏部分,保留逗号后的名字(含中间名),再清理掉多余空格即可。


方法1:基础R原生函数实现

无需额外安装包,两种写法可选:

写法A:使用sub正则替换

利用正则表达式匹配逗号及之前的所有内容,替换为空后清理空格:

get_first_name <- function(name) {
  # 匹配开头到", "的所有内容并移除,再清理首尾空格
  trimws(sub("^.*, ", "", name))
}
  • 正则^.*, :^匹配字符串开头,.*匹配任意字符(直到最后一个, ),确保精准剥离姓氏部分。
  • trimws:处理可能存在的前后多余空格。

写法B:使用strsplit分割字符串

按, 分割字符串后提取第二部分:

get_first_name <- function(name) {
  # 按", "分割每个姓名,提取分割后的第二个元素
  sapply(strsplit(name, ", "), function(x) x[2])
}
  • strsplit将每个姓名拆分为「姓氏」和「名字+中间名」两部分。
  • sapply批量提取每个分割结果的第二个元素。

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

如果常用tidyverse工具链,用stringr的函数更直观:

  1. 先安装并加载包(首次使用时):
install.packages("stringr")
library(stringr)
  1. 实现函数:
get_first_name <- function(name) {
  # 移除开头到", "的内容,再清理空格
  str_trim(str_remove(name, "^.*, "))
}
  • str_remove:精准移除匹配正则的部分,逻辑和基础R的sub一致。
  • str_trim:替代trimws,更贴合tidyverse风格。

测试验证

用示例数据测试函数效果:

# 构造测试数据框
d <- data.frame(Full.Name = c("Thompson, Billy Red", "Smith, John Doe", "Lee, Alice"))
top.25 <- head(d$Full.Name,25 )
first.25 <- get_first_name(name=top.25 )
# 输出格式化结果
data.frame(top.25, first.25) %>% pander()

输出会得到对应名字列:Billy Red、John Doe、Alice。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:05:15