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

如何使用dplyr按ID分组选取每组中到第一个5(含)的行?

使用dplyr实现按ID保留到第一个出现5的行

你可以通过dplyr的分组和切片操作实现需求,具体代码如下:

首先定义原始数据:

df1 <- data.frame(ID = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2),
                  var1 = c(0, 2, 3, 4, 2, 5, 6, 10, 11, 0, 1, 2, 1, 5, 7, 10))

核心处理代码:

library(dplyr)

# 按ID分组,保留从第一行到第一个出现5(含)的所有行
result <- df1 %>%
  group_by(ID) %>%
  slice(1:which(var1 == 5)[1]) %>%
  ungroup()

# 查看结果
print(result)

代码说明:

  • group_by(ID):将数据按ID分组,确保每个ID组内独立处理
  • slice(1:which(var1 == 5)[1]):
    • which(var1 == 5)返回当前组中var1等于5的所有行索引
    • [1]提取第一个索引,即第一次出现5的位置
    • 1:索引选取从第一行到该位置的所有行,包含出现5的那一行
  • ungroup():取消分组,将结果转换为普通数据框格式

扩展:处理无5的分组

如果数据中存在某个ID组未出现5的情况,想要保留该组全部行,可以修改代码如下:

result <- df1 %>%
  group_by(ID) %>%
  slice(1:ifelse(is.na(which(var1 == 5)[1]), n(), which(var1 == 5)[1])) %>%
  ungroup()

这里通过ifelse判断,若未找到5(which返回NA),则用n()获取当前组总行数,保留全部行。

内容的提问来源于stack exchange,提问作者Meg.abytes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:20:32