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

R语言按分组删除首次出现yes前的no行的实现方法

R语言按组删除首次yes前的no行实现方法

核心逻辑是:按id分组后,计算每组内value == "yes"的累计和,累计和≥1的行即为首次出现yes及之后的所有行,直接过滤保留即可。

方法1:dplyr实现(适合常规数据量)

先加载dplyr包,再分组过滤:

library(dplyr)

# 示例数据
DT <- data.frame(id = c(1,1,1,2,2,2,2,2,3,3,3,3,3,3),
                value = c("no","yes","yes","no","no","yes","yes","yes","no","yes","yes","yes","no","no"))

result <- DT %>%
  group_by(id) %>%
  # 累计和为0代表还未出现过yes,直接过滤
  filter(cumsum(value == "yes") >= 1) %>%
  ungroup()

运行后打印result即可得到你需要的输出。如果需要处理某组全为no的场景,可以调整过滤条件,比如要保留全no组就改成filter(cumsum(value == "yes") >= 1 | all(value == "no"))。

方法2:data.table实现(适合百万行以上的大数据量)

用data.table语法运算效率更高:

library(data.table)

# 示例数据
DT <- data.frame(id = c(1,1,1,2,2,2,2,2,3,3,3,3,3,3),
                value = c("no","yes","yes","no","no","yes","yes","yes","no","yes","yes","yes","no","no"))
setDT(DT) # 转换为data.table格式

result <- DT[, .SD[cumsum(value == "yes") >= 1], by = id]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:06:05