如何按名称分组生成日期序列:重复日期保持序列值不变
解决方案
要实现同一name下相同date对应相同序列值、仅date变化时序列递增的需求,可通过在name分组内对date做分组内的顺序标记来完成,以下是两种简洁有效的方法:
方法1:使用dense_rank()生成稠密排名
dense_rank()会为分组内相同的date分配相同的排名,不同date按顺序递增,适合直接实现需求:
library(dplyr) df <- data.frame( name = c('Jack', 'Jack', 'Jack', 'Jill', 'Jill', 'Jill', 'Jill'), date = c('01-01-2023', '01-01-2023', '01-02-2023', '01-01-2023', '01-02-2023', '01-02-2023', '01-03-2023') ) df %>% group_by(name) %>% mutate(date_sequence = dense_rank(date)) %>% ungroup()
方法2:基于unique(date)匹配顺序
如果需要严格遵循date在每组内的出现先后顺序(而非字符排序逻辑),可以用match()匹配每组内的唯一date序列:
df %>% group_by(name) %>% mutate(date_sequence = match(date, unique(date))) %>% ungroup()
两种方法都能输出你期望的结果:
| name | date | date_sequence |
|---|---|---|
| Jack | 01-01-2023 | 1 |
| Jack | 01-01-2023 | 1 |
| Jack | 01-02-2023 | 2 |
| Jill | 01-01-2023 | 1 |
| Jill | 01-02-2023 | 2 |
| Jill | 01-02-2023 | 2 |
| Jill | 01-03-2023 | 3 |
内容的提问来源于stack exchange,提问作者urblg
相关产品推荐
相关产品推荐

