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

按Group ID分组后截取每组第1、5、10…行的dplyr实现方案

dplyr分组筛选指定行实现方案

你可以通过组内行号匹配规则实现筛选,以下两种写法均完全兼容dplyr生态:

方法1:结合row_number()与filter()(可读性更强)

先为每个分组生成独立的行号后按规则筛选,适合需要保留行号做后续操作的场景:

library(dplyr)

result <- your_data %>%
  group_by(`Group ID`) %>% # 按分组字段分组
  mutate(group_inner_row = row_number()) %>% # 生成组内连续行号
  filter(group_inner_row == 1 | group_inner_row %% 5 == 0) %>% # 匹配第1行、5的倍数行
  ungroup() # 可选:筛选完成后取消分组状态

# 若不需要保留组内行号列,可新增select(-group_inner_row)移除

方法2:直接调用slice()实现(代码更简洁)

你之前使用slice失败大概率是未提前分组,导致行号是全表维度而非组内维度,正确写法如下:

library(dplyr)

result <- your_data %>%
  group_by(`Group ID`) %>%
  slice(1, seq(from = 5, to = n(), by = 5)) %>% # 直接指定取第1行、5开头步长5的行
  ungroup()

注意事项

  • 写法中n()会自动读取每个分组的总行数,不会出现索引越界问题
  • 两种写法均兼容dplyr 1.0.0及以上版本,同时支持dbplyr对接的远程数据库表操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:27:00