在日历日中拆分间隔的持续时间

时间:2011-08-22 21:52:22

标签: r time

我有以下数据集,显示一集(日期和时间)的开始和结束

ep <- data.frame(start=c("2009-07-13 23:45:00", "2009-08-14 08:30:00", 
                         "2009-09-16 15:30:00"), 
                 end=c("2009-07-14 00:03:00", "2009-08-15 08:35:00", 
                       "2009-09-19 07:30:00"))

我需要将其转换为数据框,该数据框会在每个日历日显示有多少分钟的剧集。对于上面的例子,它将是:

2009-07-13  15
2009-07-14  3
2009-08-14  930
2009-08-15  515
2009-09-16  510
2009-09-17  1440
2009-09-18  1440
2009-09-19  450

我感谢任何帮助

1 个答案:

答案 0 :(得分:2)

这有效,但看起来有点不雅。首先,创建一个向量,它是每个开始和结束时间之间的一系列时间,以分钟为单位:

tmp <- do.call(c, apply(ep, 1, 
                        function(x) head(seq(from = as.POSIXct(x[1]), 
                                             to = as.POSIXct(x[2]),by = "mins"), 
                                         -1)))

我们使用head(...., -1)删除每个序列的最后一分钟,以便分钟符合您的要求。

接下来,将此向量分成几天内发生的分数,并计算每天有多少分钟:

tmp <- sapply(split(tmp, format(tmp, format = "%Y-%m-%d")), length)

请注意,出于某种原因(可能与时区相关),我们不能仅使用as.Date(tmp)来获取日期向量,我们需要明确格式化时间以仅显示日期部分。

最后一步是将包含我们需要的所有内容的tmp对象排列到您请求的格式中:

mins <- data.frame(Date = names(tmp), Minutes = tmp, row.names = NULL)

这给出了:

> mins
        Date Minutes
1 2009-07-13      15
2 2009-07-14       3
3 2009-08-14     930
4 2009-08-15     515
5 2009-09-16     510
6 2009-09-17    1440
7 2009-09-18    1440
8 2009-09-19     450