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

R语言实现数据框ID2至ID1000列逐行重复条目检测方法

实现方案

我们可以通过逐行提取ID列的非空值,判断去重前后的长度差异来识别重复行,代码支持自动匹配ID2到ID1000的所有ID列,不需要手动指定列名,适配大范围ID列的场景。

完整实现代码(tidyverse版本,可读性高)

library(tidyverse)
# 1. 自动识别所有带数字后缀的ID列(自动覆盖ID2到ID1000)
id_cols <- str_subset(colnames(df), "^ID\\d+$")

# 2. 逐行校验重复并打标
df_result <- df %>%
  rowwise() %>%
  mutate(
    # 提取当前行所有ID列的非NA值
    id_values = list(na.omit(c_across(all_of(id_cols)))),
    # 标记是否存在重复:去重后长度小于原长度说明有重复
    是否存在重复ID = length(id_values) != length(unique(id_values)),
    # 列出具体重复的ID值,方便后续排查
    重复的ID值 = ifelse(是否存在重复ID,
                     paste(names(which(table(id_values) >=2)), collapse = ","),
                     NA_character_)
  ) %>%
  # 移除中间辅助列,不需要该列可保留本行
  select(-id_values) %>%
  ungroup()

结果说明

执行代码后会在原数据框新增两列标记:

  • 是否存在重复ID:逻辑值,TRUE代表该行有重复ID,FALSE代表无重复
  • 重复的ID值:如果存在重复,会把重复的具体ID值拼接列出,没有重复则为NA

用你提供的示例数据测试,输出结果会正确匹配需求:

  • 第二行是否存在重复ID为TRUE,重复的ID值为A0012
  • 第八行是否存在重复ID为TRUE,重复的ID值为AB982

轻量Base R版本(无需加载第三方包)

如果不想安装tidyverse,可以用原生R代码实现相同功能:

# 识别所有带数字后缀的ID列
id_cols <- grep("^ID\\d+$", colnames(df), value = T)
# 打标是否存在重复
df$是否存在重复ID <- apply(df[, id_cols], 1, function(x) {
  x_no_na <- na.omit(x)
  length(x_no_na) != length(unique(x_no_na))
})
# 提取具体重复值(可选)
df$重复的ID值 <- apply(df[, id_cols], 1, function(x) {
  x_no_na <- na.omit(x)
  tab <- table(x_no_na)
  ifelse(any(tab >=2), paste(names(tab[tab >=2]), collapse = ","), NA_character_)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:54:04