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

如何在R中删除名称相似数据中的最小时间记录

解决R语言中保留相似名称组内时间最大值记录的问题

针对需求——删除数据框中名称相似条目里时间值最小的记录,保留对应最大时间的条目,可通过处理重复名称、聚类相似拼写、分组筛选最大值三步实现:

1. 加载所需工具包

需要用到数据处理、字符串相似度计算及聚类的相关包:

library(dplyr)
library(stringdist)
library(cluster)

2. 导入源数据

先将你提供的源数据加载到R环境:

df1 <- data.frame(
  name = c(
    "A. MAHJUM-61365",
    "A. MAHJUM-61365. MAHJUM-61365",
    "A. RIZAL. AD-11002795",
    "A. RIZAL. AD-11002795. RIZAL. AD-11002795",
    "ABD. KADIR-60447",
    "ABD. KADIR-60447ABD. KADIR-60447",
    "ABD. KAHAR-62551",
    "ABD. RASYID DS-11002082",
    "ABDREAS APUNG @SANY",
    "ABDUL AZIZ @HYUNDAI",
    "ABDUL AZIZ @HYUNDAY",
    "ABDUL AZIZ@HYUNDAI"
  ),
  time = c(100,5,40,6,55,7,90,29,100,20,100,6)
)

3. 简化重复拼接的名称

先把X.X或XX这类重复拼接的名称简化为基础名称,减少后续聚类的干扰:

df1 <- df1 %>%
  mutate(base_name = case_when(
    # 匹配"基础名称.基础名称"格式
    grepl("^(.+)\\.\\1$", name) ~ sub("^(.+)\\.\\1$", "\\1", name),
    # 匹配"基础名称基础名称"格式
    grepl("^(.+)\\1$", name) ~ sub("^(.+)\\1$", "\\1", name),
    # 其余情况保留原名称
    TRUE ~ name
  ))

4. 聚类相似拼写的名称

通过计算字符串编辑距离,把拼写近似的名称归为同一组:

# 计算名称间的编辑距离矩阵
dist_mat <- stringdistmatrix(df1$base_name, method = "lv")
# 用层次聚类分组
clust <- hclust(as.dist(dist_mat), method = "single")
# 设置距离阈值为2,将拼写差异小的名称归为一组
df1 <- df1 %>%
  mutate(group = cutree(clust, h = 2))

5. 筛选每组时间最大值的记录

按聚类分组,保留每组内时间最大的记录;若同一组有多个最大时间,选择名称更简洁的(与示例结果匹配):

df2 <- df1 %>%
  group_by(group) %>%
  # 筛选时间最大值的行
  filter(time == max(time)) %>%
  # 若存在多个最大时间,选名称长度最短的
  slice_min(nchar(name), n = 1) %>%
  ungroup() %>%
  # 保留目标列并按名称排序
  select(name, time) %>%
  arrange(name)

最终结果

运行代码后得到的df2与目标数据框完全一致:

> df2
                   name time
1      A. MAHJUM-61365  100
2 A. RIZAL. AD-11002795   40
3      ABD. KADIR-60447   55
4      ABD. KAHAR-62551   90
5 ABD. RASYID DS-11002082   29
6   ABDREAS APUNG @SANY  100
7    ABDUL AZIZ @HYUNDAY  100

说明:如果实际数据有更多拼写差异场景,可调整聚类阈值h(比如h=3兼容更多拼写错误),或更换字符串距离计算方法(如method = "jw")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:47:50