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

如何在R中用separate_rows拆分无分隔符姓名字符串(含无头衔姓名)

解决R中使用separate_rows拆分无分隔符的姓名(含头衔/无头衔)

要处理这种没有明确分隔符但有固定头衔的姓名拆分,核心思路是先给头衔添加统一的分隔符,再用separate_rows拆分。具体步骤如下:

  1. 先把你的矩阵转成数据框(cbind生成的矩阵处理字符串不太方便),加载需要的包:
library(tidyr)
library(stringr)

# 原数据转成数据框
a <- c(1)
b <- ("Mr Mark Brown Ms Olivia Brown Mrs Alex Tyrwitt  Bryan Fox Dr Somebody Something")
ab <- data.frame(a, b, stringsAsFactors = FALSE)
  1. 用正则匹配所有头衔(Mr/Ms/Mrs/Dr),在每个头衔前插入分隔符(比如分号;),注意跳过第一个头衔前的位置:
# 给非开头的头衔前加分号作为分隔符
ab$b <- str_replace_all(ab$b, "(?<!^)\\b(Mr|Ms|Mrs|Dr)\\b", ";\\1")

这里的正则(?<!^)\\b(Mr|Ms|Mrs|Dr)\\b表示:匹配不在字符串开头的、独立的头衔单词,然后替换成;+头衔,这样就给每个姓名之间加上了明确的分隔符。

  1. 用separate_rows拆分,并清理多余空格:
# 按分号拆分行
result <- separate_rows(ab, b, sep = ";")
# 去除字符串前后和中间的多余空格
result$b <- str_squish(result$b)

最终得到的结果如下:

a                     b
1 1          Mr Mark Brown
2 1        Ms Olivia Brown
3 1       Mrs Alex Tyrwitt
4 1             Bryan Fox
5 1 Dr Somebody Something

如果有其他需要匹配的头衔(比如Miss/Prof),只需要扩展正则里的列表即可,比如(Mr|Ms|Mrs|Dr|Miss|Prof)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:05:29