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

R语言dplyr实现按ID分组分配连续Group=1行序号、遇0置0且ID重置

基于dplyr的实现方案

直接通过分组+条件标记累加的逻辑,完全匹配你提到的三个规则(连续Group=1分配同编号、Group=0对应值为0、ID变化时编号重置),完整代码如下:

# 加载依赖包
library(dplyr)

data %>%
  # 按ID分组,实现跨ID编号自动重置
  group_by(ID) %>%
  mutate(
    # 标记连续Group=1块的起始位置
    # 触发条件:当前行Group为1,且是组内第一行/上一行Group不为1
    block_start = (Group == 1) & (row_number() == 1 | lag(Group, default = 0) != 1),
    # 累加新块标记,得到各Group=1块的序号
    block_id = cumsum(block_start),
    # Group为0时编号设为0,否则使用块序号
    Number = ifelse(Group == 0, 0, block_id)
  ) %>%
  # 取消分组,避免后续操作受分组规则影响
  ungroup()

逻辑说明

  • 分组规则匹配“ID变化时编号重置”的要求:所有编号计算都在单个ID的分组内独立完成,不同ID的编号互不影响。
  • 块标记规则匹配“连续Group=1分配同编号、新连续块递增1”的要求:只有当当前行是Group=1,且前面不存在连续的1时,才会给计数器加1,连续的1会复用同一个编号。
  • 数值转换规则匹配“Group=0对应Number为0”的要求:所有Group=0的行直接将编号设为0,不受块计数影响。

运行上述代码得到的结果和你给出的期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 12:57:01