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

如何在R中创建新列识别零值间的序列分组

R语言实现序列分组列生成

根据需求,我们需要基于Conversions列生成分组列,规则是从一个起始值(无论0或1)到下一个触发分组变更的0之间的所有行归为同一组,仅当Conversions从1切换为0时,分组才递增。以下是两种实现方式:

方法一:使用dplyr包(tidyverse风格)

加载dplyr后,通过标记分组触发点、累加触发次数生成分组:

library(dplyr)

# 场景一数据处理
df1 <- tibble(Conversions = c(1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,0,0)) %>%
  mutate(
    # 标记分组递增触发点:当前为0且前一行不为0
    trigger = ifelse(row_number() == 1, FALSE, Conversions == 0 & lag(Conversions) != 0),
    `New Column (The Sequence)` = cumsum(trigger) + 1
  )

# 场景二数据处理
df2 <- tibble(Conversions = c(0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1)) %>%
  mutate(
    trigger = ifelse(row_number() == 1, FALSE, Conversions == 0 & lag(Conversions) != 0),
    `New Column (The Sequence)` = cumsum(trigger) + 1
  )

方法二:使用Base R(无需额外包)

利用diff()函数检测从1到0的切换,再通过cumsum()生成分组:

# 场景一处理
conversions1 <- c(1,1,0,1,1,1,0,1,1,0,0,0,1,1,1,0,0)
# 生成触发标志:diff为-1表示从1变为0
trigger1 <- c(FALSE, diff(conversions1) == -1)
group1 <- cumsum(trigger1) + 1
df1_base <- data.frame(Conversions = conversions1, `New Column (The Sequence)` = group1)

# 场景二处理
conversions2 <- c(0,0,0,1,0,1,1,1,0,0,1,0,1,1,0,1,1)
trigger2 <- c(FALSE, diff(conversions2) == -1)
group2 <- cumsum(trigger2) + 1
df2_base <- data.frame(Conversions = conversions2, `New Column (The Sequence)` = group2)

两种方法生成的分组列均与示例完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:33:54