按组创建运行计数器变量

时间:2015-12-08 19:02:21

标签: r dataframe

我有一个带有id变量和日期变量的简单数据集,并且想要创建一个计数器变量(计数器),只要id变量中的日期发生变化,它就会递增。假设数据按id和日期排序,并且特定日期可能在id内出现任意次数。这很容易在其他语言中完成(SAS使用retain或Stata with by:和_n / _N),但我还没有在R中找到一种非常有效的方法。

最终数据: enter image description here

2 个答案:

答案 0 :(得分:3)

我们可以尝试

library(dplyr)
df1 %>%
    group_by(id) %>%
    mutate(counter= cumsum(c(TRUE, date[-1]!=date[-n()])))
#      id  date counter
#   (dbl) (chr)   (int)
#1     1     a       1
#2     1     a       1
#3     1     b       2
#4     1     b       2
#5     2     a       1
#6     2     a       1
#7     2     b       2

数据

df1 <- data.frame(id= rep(c(1,2), c(4,3)), date= c('a', 'a', 
    'b', 'b', 'a', 'a', 'b'), stringsAsFactors=FALSE)

答案 1 :(得分:1)

您还可以使用data.table及其rleid - 函数:

library(data.table)


dat <- data.table(id=rep(c(1,2),c(4,3)),
                  date=c('a','a','b','b','a','a','b'))

dat[,counter:=rleid(date),by=id]
dat
> dat
   id date counter
1:  1    a       1
2:  1    a       1
3:  1    b       2
4:  1    b       2
5:  2    a       1
6:  2    a       1
7:  2    b       2