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

R语言如何给观测值按序编号,遇到offer_start值时重置编号

实现遇offer_start重置编号的方法

你已经提前按id、time完成排序,直接基于现有evconv表处理即可,以下是两种实现方案:

方案1:tidyverse(dplyr)实现

核心逻辑是通过偏移后的触发标记做分组累加,每组内生成连续序号:

library(dplyr)
evconv <- evconv %>%
  mutate(
    # 把offer_start判断后移一位,第一行默认无前置触发,默认值为FALSE
    lag_offer_flag = lag(name == "offer_start", default = FALSE),
    # 累加生成组标识,相同标识属于同一个连续编号区间
    group_id = cumsum(lag_offer_flag),
    # 分组内生成序号即为需要的结果
    target_seq = row_number(),
    # 可删除不需要的临时列
    lag_offer_flag = NULL,
    group_id = NULL
  )

方案2:Base R实现

不需要加载第三方包的原生实现:

# 生成偏移后的触发标记
lag_offer_flag <- c(FALSE, head(evconv$name == "offer_start", -1))
# 生成组标识
group_id <- cumsum(lag_offer_flag)
# 按组生成连续序号
evconv$target_seq <- ave(rep(1, nrow(evconv)), group_id, FUN = cumsum)

逻辑说明

  • 你给出的示例中,offer_start所在行属于当前序列的最后一位,下一行才开始从1计数,因此需要把name == "offer_start"的判断结果向后偏移一位再做累加
  • cumsum累加逻辑值时,TRUE会被识别为1、FALSE识别为0,每次遇到偏移后的TRUE就会进入新的编号分组
  • 同一分组内按行顺序生成1到n的序列,即可得到你需要的编号结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:54:00