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