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

R语言按ID去重并优先保留event=1值的数据子集化问题

解决方案:用dplyr实现按ID优先保留event=1的记录

可以通过分组排序后取首行的方式轻松实现需求,具体步骤如下:

步骤1:构造示例数据(可替换为你的实际数据集)

library(dplyr)

df <- tibble(
  ID = c("A", "A", "A", "A", "B", "B", "B", "C", "C"),
  event = c(1, 1, 0, 1, 0, 0, 0, 0, 1)
)

步骤2:核心处理代码

方法一:排序取首行(推荐,逻辑直观)

df_result <- df %>%
  group_by(ID) %>%
  # 按event降序排列,让event=1的行排在每组最前面
  arrange(desc(event), .by_group = TRUE) %>%
  # 提取每组的第一行
  slice(1) %>%
  # 取消分组状态
  ungroup()

方法二:条件筛选后取首行

df_result <- df %>%
  group_by(ID) %>%
  # 判断每组是否存在event=1,是则筛选event=1,否则筛选event=0
  filter(event == case_when(any(event == 1) ~ 1, TRUE ~ 0)) %>%
  # 取筛选后的第一行(避免同event有多条记录)
  slice(1) %>%
  ungroup()

输出结果

运行上述代码后,df_result的输出与你期望的一致:

# A tibble: 3 × 2
  ID    event
  <chr> <dbl>
1 A         1
2 B         0
3 C         1

逻辑说明

  • 两种方法都通过group_by(ID)将数据按ID分组,确保每个ID单独处理;
  • 方法一利用降序排序,让优先级更高的event=1行自动排在每组首位,直接取首行即可;
  • 方法二通过case_when判断每组是否存在event=1,精准筛选目标行后取首行,逻辑更直白。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:45:33