R:计算连续天数
我解决这个问题有困难,我有一个带有计数数据列表的DF。例如,类似这样的事情: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
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