【问题标题】:Count consecutive days per user in R在 R 中计算每个用户的连续天数
【发布时间】:2019-03-28 15:36:57
【问题描述】:

我有一个像下面这样的 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

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

User date_active          
1    3  
1    2
2    4 
2    3
2    1

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

【问题讨论】:

标签: r sorting date count


【解决方案1】:

使用dplyr,我们可以group_byUser 和天数差不等于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

这是假设您的 date_active 属于 Date 类,否则先将其转换为 Date

df$date_active <- as.Date(df$date_active)

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

c(0, cumsum(diff(df$date_active) != 1))
# [1] 0 0 0 1 1 2 2 2 2 3 3 3 4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 2023-03-25
    • 1970-01-01
    • 2020-07-06
    • 2021-11-06
    相关资源
    最近更新 更多