如何为连续相似条目(含例外规则)分配自定义ID?
解决方案
可以通过构建分组标记并累计计数的方式实现需求,具体代码如下:
library(tidyverse) df1 <- data.frame(X = c("A", "B", "A", "A", "B", "B", "B", "C", "C", "B")) df1 %>% mutate( # 标记是否需要生成新ID new_id = case_when( X == "C" ~ TRUE, X != lag(X, default = "") ~ TRUE, TRUE ~ FALSE ), ID = cumsum(new_id) ) %>% select(-new_id)
运行结果
X ID 1 A 1 2 B 2 3 A 3 4 A 3 5 B 4 6 B 4 7 B 4 8 C 5 9 C 6 10 B 7
逻辑说明
- 创建分组标记
new_id:- 若当前行是
C,直接标记为TRUE(每个C单独分配一个ID) - 若当前行是
A或B,当它与前一行的X值不同时,标记为TRUE(开启新的ID序列) - 连续相同的
A或B标记为FALSE(共享同一个ID)
- 若当前行是
- 生成ID:使用
cumsum(new_id)对标记为TRUE的行做累计计数,自然得到符合规则的ID序列。
内容的提问来源于stack exchange,提问作者MYaseen208
相关产品推荐
相关产品推荐

