计算R

时间:2018-10-24 09:18:26

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

我想对所有日期进行计数,直到出现间隔,然后重新开始计数。对于上述数据,我的预期输出将类似于下表。

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

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

1 个答案:

答案 0 :(得分:3)

使用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

这是假设您的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