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

如何为重复分组生成组内连续计数(R语言tibble场景)

问题:为分组生成独立连续计数列

现有如下tibble数据框:

df <- tibble(
  group = c("A", "A", "A", "B", "A", "A", "A", "C", "B", "B", "C", "A"),
  count = c(1,1,1,2,3,3,3,4,5,5,6,7)
)

其中group列存在重复的连续分组序列(比如第1-3行是A的首次连续出现,第5-7行是A的第二次连续出现),需要生成individual_running_count列,记录每个分组自身连续出现的批次编号,期望输出如下:

df <- tibble(
  group = c("A", "A", "A", "B", "A", "A", "A", "C", "B", "B", "C", "A"),
  count = c(1,1,1,2,3,3,3,4,5,5,6,7),
  individual_running_count = c(1,1,1,1,2,2,2,1,2,2,2,3)
)

解决方案

使用tidyverse工具链可以实现需求,核心思路是先识别连续相同分组的区块,再对每个分组的区块进行编号:

library(tidyverse)

# 处理数据生成目标列
df <- df %>%
  # 标记连续相同group的区块:当前行group与上一行不同时,区块编号递增
  mutate(block = cumsum(group != lag(group, default = first(group)))) %>%
  # 按group分组,对每个group的区块进行连续编号
  group_by(group) %>%
  mutate(individual_running_count = dense_rank(block)) %>%
  ungroup() %>%
  # 可选:移除临时生成的block列
  select(-block)

原理说明

  1. 识别连续区块:通过cumsum(group != lag(group, default = first(group)))生成block列,每次group发生变化时,区块编号自动+1,以此将连续相同的group归为同一个区块。
  2. 生成分组独立计数:按group分组后,用dense_rank(block)对每个分组内的区块进行排序,得到该分组每次连续出现的批次编号,也就是目标列individual_running_count。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:39:57