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
我有以下数据:
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