我有一张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我已经对数据进行了排序。
我试过粘贴姓名和日期,然后按此分组;按姓名和日期分组;我绝望了,尝试了几种不同的组合嵌套分组和变异排序盲目;开始思考一系列的循环,然后决定来这里。
3条答案
按热度按时间zi8p0yeb1#
我们可以改用
match
dy2hfwbg2#
另一种方法是数据表中的
rle.id
:创建于2023年1月4日,使用reprex v2.0.2
ohtdti5x3#
我记得我以前遇到过这个问题,在格式化这个问题的时候,我发现了一个旧的代码块。我决定把它放在那里,a)对我花了多长时间来格式化这个问题感觉更好,b)也许可以帮助别人。
效果很好。但我还是想看看其他的方法,如果人们有的话。
为我最初的文章中的斜线表示歉意。我没有意识到它们是在我乱改格式的时候加上去的。