使用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
相关产品推荐
相关产品推荐

