我正在尝试按组计算连续日期的最大长度,但我一直在努力获取。我已经包含了类似布局的代码的代码。
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
的最大长度{1}},但这不适用于rle
中所有连续日期和间隔的可能配置。
是否可以按组返回最大连续日期数?
答案 0 :(得分:3)
让我们首先创建一个函数,该函数可以在给定向量的情况下找到最大连续天数:
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
答案 1 :(得分:0)
我的解决方案:首先按键拆分数据集
SELECT BOWLERID "Bowler ID", b.BOWLERFIRSTNAME || ' ' ||
b.BOWLERLASTNAME "Bowler Name",
AVG(bs.HANDICAPSCORE)+ -200 * 0.90 "Handicap"
FROM BOWLER_SCORES bs
JOIN BOWLERS b USING (BOWLERID)
GROUP BY BOWLERID, b.BOWLERFIRSTNAME, b.BOWLERLASTNAME
ORDER BY "Handicap" DESC;
然后遍历列表,找出连续两天之差的最大长度。
df_split <- split(df, df$key)