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

R语言数据框中相似字符串行的识别与合并方法咨询

在R语言中识别并合并表述相似的疾病行

当然有办法啦!针对你遇到的这种疾病名称表述略有差异但实质相同的情况,我们可以通过文本标准化+分组合并的思路来解决,甚至可以用模糊聚类处理更复杂的场景,下面是具体的实现步骤:

一、明确差异模式,先做文本标准化

你的例子里主要是两种差异:96+ 和 >96 的符号替换,以及 HRS 和 HOURS 的缩写差异。我们可以先把这些不一致的表述统一成标准格式,这样就能轻松识别出实质相同的行。

实现代码:

首先加载常用的文本处理和数据操作包,然后定义一个标准化函数:

library(dplyr)
library(stringr)

# 自定义文本标准化函数,可根据你的实际数据扩展
standardize_disease <- function(text) {
  text %>%
    # 把 ">数字" 格式替换成 "数字+"(比如 >96 → 96+)
    str_replace_all(">(\\d+)", "\\1+") %>%
    # 统一缩写:把 HRS 替换成 HOURS(反之亦可,看你需求)
    str_replace_all("\\bHRS\\b", "HOURS") %>%
    # 去除多余的连续空格,保证格式统一
    str_squish()
}

# 假设你的数据框是 df,疾病名称列叫 disease_name
df <- df %>%
  mutate(standardized_disease = standardize_disease(disease_name))

二、按标准化后的文本分组合并

标准化完成后,所有实质相同的疾病名称会变成完全一致的文本,接下来就可以按这个标准列分组,合并你需要的其他数据列(比如计数、数值指标等)。

实现代码:

# 合并行,这里以求和数值列 count 为例,可根据需求调整
merged_df <- df %>%
  group_by(standardized_disease) %>%
  summarise(
    # 保留所有原始的差异表述,方便核对
    original_variants = paste(unique(disease_name), collapse = "; "),
    # 合并数值列:比如求和计数
    total_count = sum(count, na.rm = TRUE),
    # 如果有其他列,比如日期、分类,可按需处理(比如取第一个或合并)
    .groups = "drop"
  )

三、复杂场景:用模糊聚类处理未知差异模式

如果你的数据里还有很多不确定的表述差异(比如不同的缩写、语序变化),可以用文本距离+聚类的方法自动识别相似文本。

实现代码:

library(stringdist)
library(cluster)

# 计算疾病名称之间的文本距离(用Jaccard距离,适合短文本匹配)
dist_matrix <- stringdistmatrix(df$disease_name, method = "jaccard")

# 用层次聚类对相似文本分组
hc <- hclust(as.dist(dist_matrix), method = "ward.D2")

# 可以先画树状图,观察聚类的合适阈值
# plot(hc, cex = 0.6)

# 设定距离阈值(比如0.1,值越小要求越相似),生成聚类ID
df <- df %>%
  mutate(cluster_id = cutree(hc, h = 0.1))

# 按聚类ID合并行
merged_df_clustered <- df %>%
  group_by(cluster_id) %>%
  summarise(
    # 取标准化后的第一个文本作为代表
    representative_disease = first(standardized_disease),
    # 列出所有原始表述
    all_variants = paste(unique(disease_name), collapse = "; "),
    total_count = sum(count, na.rm = TRUE),
    .groups = "drop"
  )

注意事项

  • 标准化函数可以根据你的实际数据扩展:比如还有其他符号(如 - 和 –)、缩写(如 MV 对应的全称),都可以加入替换规则;
  • 合并数值列时,要根据业务需求选择合适的聚合方式:求和、取均值、保留所有原始值都可以;
  • 模糊聚类的阈值需要调整:可以通过树状图观察聚类分支的高度,找到能区分不同疾病的合适阈值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:41