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

如何提取数据框中ID重复的整行至新变量?R语言技术问询

提取数据中所有重复ID的行

首先,你不用纠结if语句啦——R里处理这种整行筛选的场景,用向量化操作会比循环/if判断高效得多,而且逻辑更清晰。

你的需求是保留所有ID不唯一的行(也就是ID出现次数≥2的所有对应行),可以按以下步骤来:

步骤1:创建标记重复行的逻辑向量

我们需要找出所有ID重复的行,包括第一次出现的那行(默认duplicated()只会标记后续重复的行)。可以结合正序和倒序的duplicated()结果:

# 生成逻辑向量:标记所有ID重复的行
is_dup <- duplicated(my_data$id) | duplicated(my_data$id, fromLast = TRUE)
  • duplicated(my_data$id):从前往后看,标记非首次出现的重复ID行
  • duplicated(my_data$id, fromLast = TRUE):从后往前看,标记非末次出现的重复ID行
  • 用|(逻辑或)组合后,就能得到所有ID出现次数≥2的行的标记

步骤2:筛选出目标行

直接用这个逻辑向量去筛选你的数据框即可:

# 提取所有重复ID对应的行
duplicated_rows <- my_data[is_dup, ]

举个实际例子验证

假设你的原始数据是这样的:

my_data <- data.frame(
  month = c(1, 1, 1),
  year = c(2014, 2014, 2014),
  id = c(20, 305, 305)
)

运行上面的代码后,duplicated_rows的结果就是你想要的:

month year  id
2     1 2014 305
3     1 2014 305

为什么不用if语句?

你之前写的if(duplicated(my_data$id) = TRUE)有两个小问题:

  1. 比较相等应该用==,而不是赋值的=
  2. if语句只能处理单个逻辑值,但duplicated()返回的是和数据行数一样的逻辑向量,直接用if会报错。R的优势就是向量化操作,直接用向量筛选比循环判断简洁高效得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:39:29