R标签序列通过改变因子值

R label sequence by changing factor values

我有以下数据:

Account date type
1 2021-08-31 0
1 2021-09-23 0
1 2021-09-30 5
1 2021-10-30 0
1 2021-12-29 0
1 2022-01-31 8
1 2022-02-02 0

我需要找到每个单独转换的最短日期。

group_by(Account, type) %>%
summarise(first_appearance = min(date))

returns

Account date type
1 2021-08-31 0
1 2021-09-30 5
1 2022-01-31 8

如何按类型中的每个 SHIFT 分组?

我最初的想法是沿着因子生成某种序列并连接成一个唯一的分组变量,但这将如何完成?

Account date type order type_order
1 2021-08-31 0 A 0A
1 2021-09-23 0 A 0A
1 2021-09-30 5 A 5A
1 2021-10-30 0 B 0B
1 2021-12-29 0 B 0B
1 2022-01-31 8 A 8A
1 2022-02-02 0 C 0C

期望的输出是:

group_by(Account, type_order) %>%
summarise(first_appearance = min(date))
Account date type order type_order
1 2021-08-31 0 A 0A
1 2021-09-30 5 A 5A
1 2021-10-30 0 B 0B
1 2022-01-31 8 A 8A
1 2022-02-02 0 C 0C

当行与行之间 type 存在差异时,可以使用 data.table 中的 rleid 来分配组。

library(tidyverse)
library(data.table)

df %>%
  group_by(Account, grp = rleid(type), type, order) %>%
  summarise(first_appearance = min(date))

输出

  Account   grp  type order first_appearance
    <int> <int> <int> <chr> <chr>           
1       1     1     0 A     2021-08-31      
2       1     2     5 A     2021-09-30      
3       1     3     0 B     2021-10-30      
4       1     4     8 A     2022-01-31      
5       1     5     0 C     2022-02-02