R - 计算连续日期的最大数量

R - count maximum number of consecutive dates

我正在尝试按组计算连续日期的最大长度,但我很难得到它。我已经包含了与我的布局类似的 tibble 的代码。

library(dplyr)

# construct sample tibble:
df <- tibble(
  key = rep(1:2, c(6,4)),
  Date = c(seq(as.Date('2016-12-17'), as.Date('2016-12-19'), '1 day'),
           seq(as.Date('2016-12-21'), as.Date('2016-12-23'), '1 day'),
           seq(as.Date('2017-05-18'), as.Date('2017-05-21'), '1 day'))          
)

我试过用lag()加个标签(1)表示日期之间有间隔的时候,然后统计列中0的最大长度使用 rle,但这不适用于 keys.

内连续日期和间隔的所有可能配置

有没有办法return分组最大连续日期数?

让我们首先创建一个函数,在给定向量的情况下找到最大连续天数:

gl <- function(x) {
  y <- c(unclass(diff(x)))  # c and unclass -- preparing it for rle
  r <- rle(y)
  with(r, max(lengths[values==1]))
}

现在我们可以按照通常的 dplyrry 方式使用它了:

df %>% group_by(key) %>% summarise(max.consecutive = gl(Date))

#  A tibble: 2 x 2
#     key max.consecutive
#   <int>           <int>
# 1     1               2
# 2     2               3

我的解决方案:首先按键拆分数据集

df_split <- split(df, df$key)

然后遍历列表并找到连续天数之间差异的最大长度。

df_split <- split(df, df$key)

x <- lapply(df_split, 
            function(x){
               max(rle(diff(x$Date) == 1)$lengths[rle(diff(x$Date) == 1)$value != FALSE]+1)
            }
     )