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

R语言使用tidyverse实现:指定列值变化时新列逐次累加1的方法

实现方案

优先推荐dplyr 1.1.0及以上版本自带的consecutive_id()函数,专门用于对连续相同的取值生成自增分组ID,完全匹配你的需求,代码极简:

cronograma %>%
  mutate(num = consecutive_id(Situacao))

如果你的dplyr版本低于1.1.0,可以用cumsum()搭配lag()的通用方案实现:

cronograma %>%
  mutate(num = cumsum(Situacao != lag(Situacao, default = first(Situacao))) + 1)

逻辑说明

  • consecutive_id()会自动识别连续相同的Situacao取值,每遇到取值变化就将ID自增1,默认从1开始计数,和你需要的效果完全一致。
  • 通用方案中:
    1. lag(Situacao, default = first(Situacao))取上一行的Situacao值,同时给首行设置默认值等于首行自身取值,避免返回NA
    2. 布尔判断Situacao != lag(...)在取值变化时返回TRUE(对应数值1),未变化时返回FALSE(对应数值0)
    3. cumsum()对上述结果累加得到变化次数,最后加1是让首个分组的编号从1开始

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03