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

如何在R语言中清理拼写存在差异的重复值?

在R语言中移除拼写不同的重复值

这里的需求是:同一Score下拼写相似的Name视为重复项,每组保留一个标准名称(如示例中的Abby、Tom)。

原始数据

name <- c('Abi', 'Abby', 'Aby', 'Toom', 'Tom', 'Tm', 'Crow')
score <- c(12,12,12,4,4,4,9)
duplicate <- data.frame(name, score)

解决方案

方法一:手动映射(适合小数据集)

如果已知所有拼写变体对应的标准名称,可直接创建映射表替换后去重:

# 定义变体到标准名称的映射
name_map <- c(
  'Abi' = 'Abby',
  'Aby' = 'Abby',
  'Toom' = 'Tom',
  'Tm' = 'Tom'
)

# 替换变体名称
duplicate$standard_name <- ifelse(duplicate$name %in% names(name_map), 
                                  name_map[duplicate$name], 
                                  duplicate$name)

# 按标准名称和分数去重,保留每组第一条
result <- duplicate[!duplicated(duplicate[c('standard_name', 'score')]), ]
# 调整列名和顺序
result <- result[, c('standard_name', 'score')]
colnames(result) <- c('Name', 'Score')

print(result)

方法二:基于字符串相似度自动聚类(适合大数据集)

使用stringdist包计算字符串编辑距离,自动识别每组内最具代表性的名称:

# 安装并加载所需包
install.packages('stringdist')
install.packages('dplyr')
library(stringdist)
library(dplyr)

# 分组处理:找到每组内最接近其他名称的标准值
result <- duplicate %>%
  group_by(score) %>%
  mutate(
    # 计算每个名称与组内其他名称的平均编辑距离
    avg_dist = sapply(name, function(x) mean(stringdist(x, name, method = 'lv'))),
    # 选择平均距离最小的名称作为标准
    standard_name = name[which.min(avg_dist)]
  ) %>%
  ungroup() %>%
  # 去重并调整列名
  distinct(standard_name, score, .keep_all = FALSE) %>%
  rename(Name = standard_name, Score = score)

print(result)

输出结果

Name Score
1   Abby    12
2    Tom     4
3   Crow     9

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:20:35