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)
}
)
我正在尝试按组计算连续日期的最大长度,但我很难得到它。我已经包含了与我的布局类似的 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)
}
)