我想为每个小组创建一个不断增加的计数器,其中每个小组是人与日的独特组合。
这就是数据的样子:
> 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
我希望数据足够清晰。计数器一直持续到数据集结束。
答案 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