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

按ID分组筛选数据集:保留满足条件的行及指定后续行

R语言按ID分组筛选行的解决方案

需求说明

按ID分组后,保留满足以下任一条件的行:

  • 该行Condition1列的值为1
  • 该行Condition2列的值为1,且紧邻在Condition1列值为1的行下方

数据集

df <- 
  read.table(textConnection("ID   Condition1   Condition2
A 1 0
A 1 1 
A 0 1
A 1 0
A 0 0 
A 0 1
B 1 1
B 0 1
C 1 0
C 0 0 
D 1 0
D 0 1
D 1 1 
D 0 0
"), header=TRUE)

解决方案代码

使用dplyr包完成分组筛选操作:

library(dplyr)

filtered_df <- df %>%
  group_by(ID) %>%
  mutate(prev_condition1 = lag(Condition1, default = 0)) %>%
  filter(Condition1 == 1 | (Condition2 == 1 & prev_condition1 == 1)) %>%
  select(-prev_condition1) %>%
  ungroup()

# 查看筛选结果
print(filtered_df)

代码逻辑解释

  1. 分组处理:通过group_by(ID)保证每个ID内部独立处理行的顺序与条件
  2. 生成辅助列:lag(Condition1, default = 0)获取当前行的上一行Condition1值,第一行无前置行,默认设为0
  3. 筛选规则:
    • 直接保留Condition1 == 1的行
    • 保留Condition2 == 1且上一行Condition1 == 1的行
  4. 清理数据:移除辅助列prev_condition1,并取消分组状态

输出结果

运行代码后得到的结果与预期一致:

IDCondition1Condition2
A10
A11
A01
A10
B11
B01
C10
D10
D01
D11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:15:53