我有一个样本数据,看起来像这样:
| ID|日期|阶段|
| --------------|--------------|--------------|
| 1|2020-01-01 2020-01-01|红色|
| 1|2020-01-02 2020-01-02|黄色|
| 1|2020-01-03 2020-01-03|黄色|
| 1|2020-01-03 2020-01-03|绿色|
| 1|2020-01-04 2020-01-04|绿色|
| 1|2020-01-05 2020-01-05|红色|
| 二|2020-01-02 2020-01-02|红色|
| 二|2020-01-03 2020-01-03|红色|
| 二|2020-01-03 2020-01-03|黄色|
| 二|2020-01-04 2020-01-04|红色|
| 二|2020-01-05 2020-01-05|黄色|
| 二|2020-01-06 2020-01-06|黄色|
我想在R中找到一个基于dplyr的(或任何其他方法?)解决方案,以便我可以确定每个ID的每个连续阶段的开始和结束日期。变量Stages可以重复。最终输出应该看起来像这样:
| ID|阶段|开始日期|结束日期|
| --------------|--------------|--------------|--------------|
| 1|红色|2020-01-01 2020-01-01|2020-01-01 2020-01-01|
| 1|黄色|2020-01-02 2020-01-02|2020-01-03 2020-01-03|
| 1|绿色|2020-01-03 2020-01-03|2020-01-04 2020-01-04|
| 1|红色|2020-01-05 2020-01-05|2020-01-05 2020-01-05|
| 二|红色|2020-01-02 2020-01-02|2020-01-03 2020-01-03|
| 二|黄色|2020-01-03 2020-01-03|2020-01-03 2020-01-03|
| 二|红色|2020-01-04 2020-01-04|2020-01-04 2020-01-04|
| 二|黄色|2020-01-05 2020-01-05|2020-01-06 2020-01-06|
1条答案
按热度按时间ibps3vxo1#
我们可以在汇总或
reframe
之前使用data.table::rleid/dplyr::consecutive_id
创建分组列如果我们使用的是旧版本的
dplyr
,请使用数据