我想为每个组创建一个不断增加的计数器,其中每个组都是人和天的独特组合。
这是数据的样子:
> df
person date
1 0 monday
2 0 tuesday
3 1 monday
4 1 monday
5 1 tuesday
6 2 monday
7 2 monday
8 2 tuesday
9 2 wednesday
Run Code Online (Sandbox Code Playgroud)
因此,我想添加一个从 1 开始的新变量,并为每个新的人和日期组合添加。
> df
person date counter
1 0 monday 1
2 0 tuesday 2
3 1 monday 3
4 1 monday 3
5 1 tuesday 4
6 2 monday 5
7 2 monday 5
8 2 tuesday 6
9 2 wednesday 7
Run Code Online (Sandbox Code Playgroud)
我希望数据足够清楚。计数器继续直到到达数据集的末尾。
您可以rleid从 的开发版本开始使用data.table。安装开发版本的说明是here
library(data.table)#v.9.5+
setDT(df)[, counter:= rleid(date)][]
# person date counter
# 1: 0 monday 1
# 2: 0 tuesday 2
# 3: 1 monday 3
# 4: 1 monday 3
# 5: 1 tuesday 4
# 6: 2 monday 5
# 7: 2 monday 5
# 8: 2 tuesday 6
# 9: 2 wednesday 7
Run Code Online (Sandbox Code Playgroud)
或者
library(dplyr)
df %>%
mutate(counter= cumsum(date!=lag(date, default=FALSE)))
Run Code Online (Sandbox Code Playgroud)