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

R语言去除数据框字符串内重复驼峰命名机构名称的更优雅实现方案

R机构名称去重+驼峰拆分优化解法

核心优化思路

原方案通过生成多列中间变量判断重复,可直接用正则表达式的零宽断言和捕获组功能,2行核心代码完成需求,同时适配带后缀的场景。

完整实现代码

依赖包

只需要用到stringr和dplyr,习惯用基础R也可换成gsub实现同等逻辑。

library(stringr)
library(dplyr)

基础场景解法(无后缀)

# 构造测试数据
df <- data.frame(
  id=1:4, 
  org=c("Alpha Company", "Bravo InstituteBravo Institute", "Charlie Group", "Delta IncorporatedDelta Incorporated")
)

# 清洗逻辑
df_clean <- df %>%
  mutate(
    # 拆分驼峰:仅在小写字母接大写字母的位置插入空格,不破坏原有正常格式
    org_split = str_replace_all(org, "(?<=[a-z])(?=[A-Z])", " "),
    # 去重复:如果整个字符串是相同内容重复两次,直接替换为单次内容
    org_fix = str_replace(org_split, "^(.+)\\1$", "\\1")
  ) %>%
  # 保留需要的列
  select(id, org = org_fix)

附加场景解法(适配, LLC等后缀)

上述代码完全兼容带后缀的场景,不需要修改逻辑,直接运行即可:

# 构造带后缀的测试数据
df2 <- data.frame(
  id=1:4, 
  org=c("Alpha Company, LLC", "Bravo InstituteBravo Institute", "Charlie Group", "Delta IncorporatedDelta Incorporated")
)

# 复用同样的清洗逻辑
df2_clean <- df2 %>%
  mutate(
    org_split = str_replace_all(org, "(?<=[a-z])(?=[A-Z])", " "),
    org_fix = str_replace(org_split, "^(.+)\\1$", "\\1")
  ) %>%
  select(id, org = org_fix)

逻辑说明

  1. 驼峰拆分逻辑:用零宽断言(?<=[a-z])(?=[A-Z])匹配小写字母和大写字母的交界位置插入空格,不会修改, LLC这类后缀里的大写字母,解决了原有gsub误加空格的问题。
  2. 去重逻辑:用正则^(.+)\\1$直接匹配「整个字符串由相同内容连续重复两次组成」的情况,用捕获组直接提取单次内容,不需要额外生成中间列判断重复,代码更精简高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:15:03