R语言 沿着按因子分组的日期创建序列,但在日期重复时重复相同的序列

pkln4tw6  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(119)

我有一张table,说...

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') )

杰克,2023年1月1日
杰克,2023年1月1日
杰克,2023年2月1日
吉尔,2023年1月1日
吉尔,2023年2月1日
吉尔,2023年2月1日
吉尔,2023年3月1日
我可以创建一个简单的日期序列:

df %\>%  
group_by(name) %\>%  
mutate(date_sequence = seq(1,n(),1)) %\>%  
ungroup()

要获得:
杰克,2023年1月1日,1
杰克,2023年1月1日,2
杰克,2023年2月1日,3
吉尔,2023年1月1日,1
吉尔,2023年2月1日,2
吉尔,2023年2月1日,3
吉尔,2023年3月1日,4
但我真正想要的是:
杰克,2023年1月1日,1
杰克,2023年1月1日,1
杰克,2023年1月2日,2
吉尔,2023年1月1日,1
吉尔,2023年2月1日,2
吉尔,2023年2月1日,2
吉尔,2023年3月1日,3
其中序列只在日期变化时增长,理想情况下是在日期上升时,但是IRL我已经对数据进行了排序。
我试过粘贴姓名和日期,然后按此分组;按姓名和日期分组;我绝望了,尝试了几种不同的组合嵌套分组和变异排序盲目;开始思考一系列的循环,然后决定来这里。

zi8p0yeb

zi8p0yeb1#

我们可以改用match

library(dplyr)
df %>% 
   group_by(name) %>% 
   mutate(date_sequence = match(date, unique(date))) %>% 
   ungroup
  • 输出
# A tibble: 7 × 3
  name  date       date_sequence
  <chr> <chr>              <int>
1 Jack  01-01-2023             1
2 Jack  01-01-2023             1
3 Jack  01-02-2023             2
4 Jill  01-01-2023             1
5 Jill  01-02-2023             2
6 Jill  01-02-2023             2
7 Jill  01-03-2023             3
dy2hfwbg

dy2hfwbg2#

另一种方法是数据表中的rle.id

df %>%
  group_by(name) %>%
  mutate(date_sequence = data.table::rleid(date))
#> # A tibble: 7 x 3
#> # Groups:   name [2]
#>   name  date       date_sequence
#>   <chr> <chr>              <int>
#> 1 Jack  01-01-2023             1
#> 2 Jack  01-01-2023             1
#> 3 Jack  01-02-2023             2
#> 4 Jill  01-01-2023             1
#> 5 Jill  01-02-2023             2
#> 6 Jill  01-02-2023             2
#> 7 Jill  01-03-2023             3

创建于2023年1月4日,使用reprex v2.0.2

ohtdti5x

ohtdti5x3#

我记得我以前遇到过这个问题,在格式化这个问题的时候,我发现了一个旧的代码块。我决定把它放在那里,a)对我花了多长时间来格式化这个问题感觉更好,b)也许可以帮助别人。

df %>%
  group_by(name) %>%
  mutate(entry_seq = cumsum(date != lag(date, default = first(date))) + 1)

效果很好。但我还是想看看其他的方法,如果人们有的话。
为我最初的文章中的斜线表示歉意。我没有意识到它们是在我乱改格式的时候加上去的。

相关问题