Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-计数连续日期的最大数量_R_Dataframe_Dplyr_Tibble - Fatal编程技术网

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

R-计数连续日期的最大数量,r,dataframe,dplyr,tibble,R,Dataframe,Dplyr,Tibble,我试图按组计算连续约会的最大长度,但我很难得到它。我已经包含了一个类似于我的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

我试图按组计算连续约会的最大长度,但我很难得到它。我已经包含了一个类似于我的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'))          
)
库(dplyr)
#构造示例TIBLE:

df首先让我们做一个函数,在给定向量的情况下,求出最大连续天数:

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

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

df_split <- split(df, df$key)

df_split Hi@lebatsnok谢谢你写这篇文章,尽管我有一个简短的问题。当我在示例表中计算最大连续天数时,我为键1计算3,为键2计算4。函数中是否需要有一个
+1
,如果需要,是因为函数当前既不计算开始日期也不计算结束日期吗?是的,您可以将1添加到函数的最后一行。此外,如果
rle
返回的值均不为1(即,如果没有连续的日期),则应该有合理的返回值。类似于
if(any(r$values%in%1)),最后一行是(r,max(length[values==1]))else 1
,如果一行中有许多不连续的日期,则会给出错误的结果。比如说,
d
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)
            }
     )