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

如何用dplyr保留每个id分组中首个1及之前的行?

使用dplyr实现按分组保留第一个值为1的行及之前的所有行

我们需要对data.frame按id分组,删除每个分组中第一个出现值为1的行之后的所有行,同时保留该行及之前的行。

数据复现代码

df <- structure(list(id = c("a", "a", "a", "a", "a", "b", "b", "b", 
"b"), x = c(0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L)), class = "data.frame", row.names = c(NA, 
-9L))

解决方案

可以用dplyr的分组+切片方法,直接定位每个组中第一个值为1的行的位置,提取从开头到该位置的所有行:

library(dplyr)

result <- df %>%
  group_by(id) %>%
  slice(1:which(x == 1)[1]) %>%
  ungroup()

print(result)

输出结果

# A tibble: 5 × 2
  id        x
  <chr> <int>
1 a         0
2 a         0
3 a         1
4 b         0
5 b         1

扩展:处理无值为1的分组

如果需要兼容某些分组中没有值为1的情况(保留整个分组),可以调整代码:

result <- df %>%
  group_by(id) %>%
  slice(1:ifelse(any(x == 1), which(x == 1)[1], n())) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:55:01