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

如何使用R语言separate函数拆分全大写姓氏与常规姓名

用tidyr::separate拆分全大写姓氏与常规大小写名字

直接用tidyr的separate函数配合正则表达式就能精准拆分,核心是定位姓氏(全大写)和名字(首字母大写+小写)之间的分界空格。

完整代码示例

# 加载所需包
library(tidyr)
library(tibble)

# 原始姓名列表
my_column_of_names <- c("DI VICENZO John", "SMITH Anne Marie", "O'ROURKE Paddy", "MARTIN-JONES Jim Rae")

# 转换为数据框便于处理
names_df <- tibble(full_name = my_column_of_names)

# 拆分姓氏和名字
names_df_separated <- names_df %>%
  separate(
    col = full_name,
    into = c("surname", "given_name"),
    sep = "(?<=[A-Z]) (?=[A-Z][a-z])",
    remove = FALSE  # 可选参数,保留原全名列方便核对
  )

# 查看结果
print(names_df_separated)

输出结果

# # A tibble: 4 × 3
#   full_name           surname      given_name
#   <chr>               <chr>        <chr>
# 1 DI VICENZO John     DI VICENZO   John
# 2 SMITH Anne Marie    SMITH        Anne Marie
# 3 O'ROURKE Paddy      O'ROURKE     Paddy
# 4 MARTIN-JONES Jim Rae MARTIN-JONES Jim Rae

正则表达式解释

拆分用的正则(?<=[A-Z]) (?=[A-Z][a-z])逻辑清晰:

  • (?<=[A-Z]):反向预查,确保空格前是大写字母(姓氏的最后一个字符)
  • :匹配姓氏和名字之间的分界空格
  • (?=[A-Z][a-z]):正向预查,确保空格后是「大写字母+小写字母」(名字的开头格式,符合常规大小写规则)

这个规则能兼容带空格、撇号、连字符的特殊姓氏,只要姓氏是全大写、名字是首字母大写的常规格式,就能准确拆分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:50:24