R:计算连续天数

R:计算连续天数,r,count,statistics,R,Count,Statistics,我解决这个问题有困难,我有一个带有计数数据列表的DF。例如,类似这样的事情: DATE TIME ID 2014-02-14 15:02 1 2014-02-15 15:12 1 2014-02-16 08:34 2 2014-02-17 02:02 2 2014-02-19 11:02 1 2014-02-20 15:42 1 2014-02-22 16:02 2 2014-02-25 15.02

我解决这个问题有困难,我有一个带有计数数据列表的DF。例如,类似这样的事情:

 DATE        TIME     ID
 2014-02-14  15:02    1
 2014-02-15  15:12    1
 2014-02-16  08:34    2
 2014-02-17  02:02    2
 2014-02-19  11:02    1
 2014-02-20  15:42    1
 2014-02-22  16:02    2
 2014-02-25  15.02    1
 ....
现在,我想创建一个函数来测量连续天数的长度,但我希望该函数能够设置允许日期间隔的天数(默认值=1天)。输出应该是一个DF,每个ID有多行(因为这表示有多个活动周期),并且每个连续周期应该显示该周期包含的天数。输出的示例应为:

 ID        periodID     days
 1         1            2
 2         1            2
 1         2            2
 ....
所以第一个问题是,我如何构建这样的DF?其次,我如何扩展此功能,以便在函数中输入信息,确保间隔2天或4天的日期包含在同一期间内(因此不是连续日期,但允许间隔>1天)

编辑这里是我正在处理的原始数据集的一个片段(请注意,同一天有多个数据点,但时间被忽略,只有日期重要)


我们可以使用
dplyr
。首先,将数据转换为正确的日期格式:

z$date <- as.Date(as.character(z$date), format = "%d-%m-%y")

注意:您的数据很少有日期更改或间隙,是否可以包含更好的测试数据集

谢谢大家!!只是一个简单的问题,“>%”是做什么的?现在要测试它。它是来自
magrittr
/
dplyr
的管道操作员。它可以帮助您避免长链-请参阅晚一点的注释,但在使用该函数时会出现以下错误:UseMethod中的错误(“排列”):没有适用于“日期”类对象的“排列”方法。您希望在整个数据帧而不是单个列上运行它(即
runchecker(data,1)
,而不是
runchecker)(data$date,1)
)不起作用,我得到了一个满是NA的DF。有关更新的数据集,请参阅。
z$date <- as.Date(as.character(z$date), format = "%d-%m-%y")
library(dplyr)
runchecker <- function(data, days){
  data %>% arrange(date) %>%
           group_by(ID) %>%
           mutate(diff = c(0, diff(date)),
                  periodID = 1 + cumsum(diff > days)) %>%
           group_by(ID, periodID) %>%
           summarise(days = last(date) - first(date))
}
runchecker(data, 1)
Source: local data frame [4 x 3]
Groups: ID [?]

     ID periodID   days
  (int)    (dbl) (dfft)
1     1        1 0 days
2     2        1 3 days
3     3        1 0 days
4     4        1 0 days