对于每个唯一的值组,将计数器增加1

时间:2015-07-22 20:23:05

标签: 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

因此,我想从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

我希望数据足够清晰。计数器一直持续到数据集结束。

2 个答案:

答案 0 :(得分:4)

您可以使用rleid的开发版本中的data.table。安装devel版本的说明是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

或者

library(dplyr)
df %>%  
   mutate(counter= cumsum(date!=lag(date, default=FALSE)))

答案 1 :(得分:2)

基础套餐:

df1 <- data.frame(unique(df), counter= 1:nrow(unique(df)))
merge(df, df1)

输出:

  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