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

时间:2018-12-10 20:13:43

标签: 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'))          
)

我尝试使用lag()添加标签(1)来指示日期之间何时有间隔,然后使用{计算列中0的最大长度{1}},但这不适用于rle中所有连续日期和间隔的可能配置。

是否可以按组返回最大连续日期数?

2 个答案:

答案 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)