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

使用R语言从NAMEFIRST列移除头衔生成Clean_name列的方案建议

如何用R语言从姓名列移除头衔生成Clean_name格式结果

嘿,我来帮你搞定这个姓名处理的需求!从你的示例数据能看出来,要处理的情况还挺多样——有的头衔跟在名字后带空格(比如BHASOTI MS),有的直接和名字连在一起(比如BHABESHMR),还有长名字后面带空格的头衔(比如SUSHIL KUMAR MR)。下面给你两种实用的实现方式:

方法1:用stringr包(tidyverse风格)

stringr是tidyverse家族里处理字符串的利器,语法直观好理解:

# 先安装并加载包(如果还没装的话)
install.packages("stringr")
library(stringr)

# 生成Clean_name列
df$Clean_name <- str_remove_all(df$NAMEFIRST, "\\s?(MR|MS|MRS|DR|MSTR)$")

正则表达式解释

  • \\s?:匹配0个或1个空格,同时覆盖头衔前有空格和没空格的情况
  • (MR|MS|MRS|DR|MSTR):列出所有需要移除的头衔关键词
  • $:限定这些关键词必须出现在字符串末尾,避免误删名字本身包含这些字符的情况

方法2:用Base R原生gsub函数

如果不想额外加载包,用Base R的gsub也能达到完全一样的效果:

# 直接生成Clean_name列
df$Clean_name <- gsub("\\s?(MR|MS|MRS|DR|MSTR)$", "", df$NAMEFIRST)

测试示例数据

你可以用自己的示例数据验证效果:

# 构造示例数据框
df <- data.frame(NAMEFIRST = c("BHASOTI MS", "BHABESHMR", "RINAMS", "SUSHMITAMRS", "ARKADIY MR", 
                               "PRAMOD TRIMBAK DR", "ANDREW MR", "MICHELLE MISS", "DINESHA MR", 
                               "SREEDHARMR", "PANKAJMSTR", "SUSHIL KUMAR MR", "FAZLURMR"),
                 stringsAsFactors = FALSE)

# 应用处理逻辑(这里加上了MISS来适配示例里的MICHELLE MISS)
df$Clean_name <- str_remove_all(df$NAMEFIRST, "\\s?(MR|MS|MRS|DR|MSTR|MISS)$")

# 查看结果
print(df)

运行后就能得到和你示例完全一致的Clean_name列啦!如果之后需要移除其他头衔,只要在正则表达式的括号里添加对应的关键词就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:14:38