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

