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

R语言如何按Stage列规则删除Study_ID字段的重复值

R语言按指定规则去重数据集实现方法

需求核心是按Study_ID去重时,优先保留Stage字段值为Stable的记录,仅当某个ID没有对应Stable记录时才保留Early Stage记录,以下提供两种可直接运行的实现方案:


方案1:dplyr实现(代码可读性高,适合日常数据处理)

首先确保已安装dplyr包,未安装可先运行install.packages("dplyr"),代码如下:

library(dplyr)

# 构造原始测试数据集
data <- data.frame(
  Study_ID = c("100","100","200","300","400","400","500","500","600","700"),
  Stage = c("Early Stage","Stable","Stable","Early Stage","Early Stage","Stable","Early Stage","Stable","Stable","Early Stage")
)

result <- data %>%
  # 设定Stage的保留优先级:Stable > Early Stage
  mutate(Stage = factor(Stage, levels = c("Stable", "Early Stage"))) %>%
  group_by(Study_ID) %>%
  # 组内按优先级排序,取第一条记录
  arrange(Stage, .by_group = TRUE) %>%
  slice_head(n = 1) %>%
  # 还原Stage为字符格式,和原数据类型保持一致
  mutate(Stage = as.character(Stage)) %>%
  ungroup()

方案2:base R实现(无需安装第三方包)

如果不想加载额外扩展包,可以用R原生函数实现,核心逻辑和方案1完全一致:

# 构造原始测试数据集
data <- data.frame(
  Study_ID = c("100","100","200","300","400","400","500","500","600","700"),
  Stage = c("Early Stage","Stable","Stable","Early Stage","Early Stage","Stable","Early Stage","Stable","Stable","Early Stage")
)

# 新增优先级列:Stable权重为1(优先级更高),Early Stage权重为2
data$priority <- match(data$Stage, c("Stable", "Early Stage"))
# 按Study_ID分组、优先级升序排序
data_sorted <- data[order(data$Study_ID, data$priority), ]
# 去重:每个Study_ID仅保留排序后的第一条记录,删除临时优先级列
result <- data_sorted[!duplicated(data_sorted$Study_ID), c("Study_ID", "Stage")]

# 可选:重置行号,和期望输出格式完全对齐
rownames(result) <- seq_len(nrow(result))

输出结果验证

运行上述任意方案后,打印result即可得到完全符合预期的输出:

Study_ID       Stage
1      100      Stable
2      200      Stable
3      300 Early Stage
4      400      Stable
5      500      Stable
6      600      Stable
7      700 Early Stage

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:27:35