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

R语言使用dplyr筛选含连续2个yes且总yes≥3的id分组

R数据框按id分组筛选满足双条件分组的实现方案

需求说明

需要按id分组保留同时满足以下两个条件的整组数据:

  • 组内y列取值为yes的记录总数不少于3条
  • 组内y列存在至少连续2个取值为yes的记录

示例数据构造

DT<-data.frame(id=c(1,1,1, 1,2,2,2,3,3,3, 3,4,4,4), 
               y=c("no", "yes","yes","no","no", "yes", "no","yes","yes","no","yes", "yes","yes","yes"))

可行dplyr实现代码

library(dplyr)
DT %>% 
  group_by(id) %>% 
  filter(
    # 条件1:组内yes总条数≥3
    sum(y == "yes") >= 3,
    # 条件2:存在至少连续2个yes
    any(with(rle(y == "yes"), lengths[values] >= 2))
  ) %>%
  ungroup()

代码逻辑说明

  1. 先按id分组,两个筛选条件均为组级判断,满足条件的分组会保留全部行
  2. 第一个条件直接统计每组y为yes的总条数,满足数量要求
  3. 第二个条件使用rle()(游程编码函数)统计连续相同值的长度:
    • rle(y == "yes")返回每组中连续TRUE(对应yes)和FALSE(对应no)的长度列表
    • 提取取值为TRUE的连续长度,判断是否存在长度≥2的情况,满足即存在连续2个及以上yes

原代码问题说明

原代码使用行级的cumsum(y == 'yes')>1作为筛选条件,只会保留组内累计yes数超过1的部分行,也没有同时判断两个组级筛选规则,因此无法得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:57:03