基于group_by变量添加新的唯一分组ID



我有一个数据集,里面有加班给药的情况。我想为每一块正在服用的药物创建一组。我想出了一个简单的方法来做这件事,用一个for循环,我可以把它应用到每个病人身上。

但我很好奇,在tidyverse的领域里,是否有简单的方法可以做到这一点?这并不重要,但更重要的是,我很好奇是否已经为这个问题创建了一个简单的方法。

设置

have <- tibble(
patinet = c(1),
date = seq(today(), today()+11,1),
drug = c(rep("a",3), rep("b",3), rep("c",3), rep("a",3))
)

## Want
want <- tibble(
patinet = c(1),
date = seq(today(), today()+11,1),
drug = c(rep("a",3), rep("b",3), rep("c",3), rep("a",3)),
grp =  sort(rep(1:4,3))
)
> have
# A tibble: 12 × 3
patinet date       drug 
<dbl> <date>     <chr>
1       1 2022-03-16 a    
2       1 2022-03-17 a    
3       1 2022-03-18 a    
4       1 2022-03-19 b    
5       1 2022-03-20 b    
6       1 2022-03-21 b    
7       1 2022-03-22 c    
8       1 2022-03-23 c    
9       1 2022-03-24 c    
10       1 2022-03-25 a    
11       1 2022-03-26 a    
12       1 2022-03-27 a    
> want
# A tibble: 12 × 4
patinet date       drug    grp
<dbl> <date>     <chr> <int>
1       1 2022-03-16 a         1
2       1 2022-03-17 a         1
3       1 2022-03-18 a         1
4       1 2022-03-19 b         2
5       1 2022-03-20 b         2
6       1 2022-03-21 b         2
7       1 2022-03-22 c         3
8       1 2022-03-23 c         3
9       1 2022-03-24 c         3
10       1 2022-03-25 a         4
11       1 2022-03-26 a         4
12       1 2022-03-27 a         4

您可以使用data.table::rleid

have %>% mutate(group = data.table::rleid(drug))
# A tibble: 12 x 4
patinet date       drug  group
<dbl> <date>     <chr> <int>
1       1 2022-03-16 a         1
2       1 2022-03-17 a         1
3       1 2022-03-18 a         1
4       1 2022-03-19 b         2
5       1 2022-03-20 b         2
6       1 2022-03-21 b         2
7       1 2022-03-22 c         3
8       1 2022-03-23 c         3
9       1 2022-03-24 c         3
10       1 2022-03-25 a         4
11       1 2022-03-26 a         4
12       1 2022-03-27 a         4

最新更新