arn*_*d-c 3 r dataframe dplyr 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'))
)
Run Code Online (Sandbox Code Playgroud)
我试图用lag()添加标签(1)来表示时,有日期之间的间隙,再算上的最大长度0列中的使用rle,但这并不工作中连续的日期和差距的所有可能的配置keys。
有没有办法按组返回最大连续日期数?
让我们首先创建一个函数,在给定向量的情况下找到最大连续天数:
gl <- function(x) {
y <- c(unclass(diff(x))) # c and unclass -- preparing it for rle
r <- rle(y)
with(r, max(lengths[values==1]))
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以用通常的 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
Run Code Online (Sandbox Code Playgroud)