每组唯一值的计数器增加 1

Bou*_*man 5 r

我想为每个组创建一个不断增加的计数器,其中每个组都是人和天的独特组合。

这是数据的样子:

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

我希望数据足够清楚。计数器继续直到到达数据集的末尾。

akr*_*run 5

您可以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)