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

在R语言中将姓名从‘姓氏 名字’格式转换为‘名字首字母. 姓氏’

解决R语言姓名格式转换问题

问题核心

你的姓名数据有明确格式:姓氏为全大写单词(支持多姓氏、连字符),名字为首字母大写的单词(支持多名字),目标是提取名字的首字母,拼接回姓氏前,格式为首字母. 姓氏。原函数的错误在于搞反了姓氏和名字的位置,且未利用数据的大小写特征来准确区分二者。

修正后的函数

library(stringr)

convert_name <- function(name) {
  # 拆分姓名为单个单词
  name_parts <- str_split(name, " ")[[1]]
  
  # 用大小写区分姓氏(全大写含连字符)和名字(非全大写)
  surname <- paste(name_parts[str_detect(name_parts, "^[A-Z-]+$")], collapse = " ")
  given_initial <- str_to_upper(str_sub(name_parts[!str_detect(name_parts, "^[A-Z-]+$")][1], 1, 1))
  
  # 组合成目标格式
  paste0(given_initial, ". ", surname)
}

验证效果

将你的姓名列表传入函数测试:

names <- c("CASEY Aoife", "CREMEN Margaret", "MORCH-PEDERSEN Marie", 
           "RORVIK Jenny Marie", "MIGUEL GOMES Natalia", "ROHNER Maria-Clara")

sapply(names, convert_name)

输出结果完全符合需求:

CASEY Aoife            CREMEN Margaret     MORCH-PEDERSEN Marie 
               "A. CASEY"             "M. CREMEN"      "M. MORCH-PEDERSEN" 
        RORVIK Jenny Marie     MIGUEL GOMES Natalia          ROHNER Maria-Clara 
             "J. RORVIK"       "N. MIGUEL GOMES"           "M. ROHNER" 

关键处理说明

  • 多姓氏/连字符姓氏:通过正则^[A-Z-]+$匹配全大写含连字符的单词,拼接后保留原格式
  • 多名字:取名字部分的第一个单词首字母,符合目标输出要求
  • 鲁棒性:依赖数据本身的大小写特征区分姓氏和名字,比单纯按位置拆分更准确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:50