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开始计数,和你需要的效果完全一致。- 通用方案中:
lag(Situacao, default = first(Situacao))取上一行的Situacao值,同时给首行设置默认值等于首行自身取值,避免返回NA- 布尔判断
Situacao != lag(...)在取值变化时返回TRUE(对应数值1),未变化时返回FALSE(对应数值0) cumsum()对上述结果累加得到变化次数,最后加1是让首个分组的编号从1开始
内容的提问来源于stack exchange,提问作者Jn Coe
相关产品推荐
相关产品推荐

