在 R 中计算每个用户的连续天数

qui*_*git 2 sorting r date count

我有一个像下面这样的 R 数据框,其中包含每个用户和他们活动的天数列表。

User    date_active          
1       2018-08-27  
1       2018-08-28
1       2018-08-29 
1       2018-08-31
1       2018-09-01
2       2018-07-05
2       2018-07-06
2       2018-07-07
2       2018-07-08
2       2018-07-10
2       2018-07-11
2       2018-07-12
2       2018-07-20
Run Code Online (Sandbox Code Playgroud)

我想计算所有日期,直到间隔重新开始计数。对于上述数据,我的预期输出如下表所示。

User date_active          
1    3  
1    2
2    4 
2    3
2    1
Run Code Online (Sandbox Code Playgroud)

我最初的猜测是使用该rank函数,difftime但我不确定如何获得结果。非常感激任何的帮助!

Ron*_*hah 5

随着dplyr我们可以group_by User和天数时天差不等于1,我们再算上每个组中行的数量。

library(dplyr)

df %>%
  group_by(User, days = c(0, cumsum(diff(date_active) != 1))) %>%
  summarise(date_active = n()) %>%
  select(-days)

#   User date_active
#  <int>       <int>
#1     1           3
#2     1           2
#3     2           4
#4     2           3
#5     2           1
Run Code Online (Sandbox Code Playgroud)

这是假设您date_active是一流的Date,否则将其转换为Date第一个

df$date_active <- as.Date(df$date_active)
Run Code Online (Sandbox Code Playgroud)

创建分组变量是这里的关键。看

c(0, cumsum(diff(df$date_active) != 1))
# [1] 0 0 0 1 1 2 2 2 2 3 3 3 4
Run Code Online (Sandbox Code Playgroud)