计算指定时间段内值为1的总时间

问题描述:

我有一个包含两列的数据集。我需要计算在00:00至6:00之间该值大于1的总时间(以秒为单位)。我如何在R中以最有效的方式做到这一点?这可以使用dplyr包来完成吗?我需要以一种通用的方式来做到这一点,以便它可以应用于其他持续时间(6至9,9至12)。以下是一些示例数据:计算指定时间段内值为1的总时间

+--------------------------------------+ 
|  Timestamp     Value | 
+--------------------------------------+ 
| 2015-10-01 00:00:00   300 | 
| 2015-10-01 00:00:55   200 | 
| 2015-10-01 00:25:10   0  | 
| 2015-10-01 01:05:40   876 | 
| 2015-10-01 02:05:40   989 | 
| 2015-10-01 04:05:40   0  | 
| 2015-10-01 05:00:00   600 | 
| 2015-10-01 06:00:00   300 | 
+--------------------------------------+ 

因此,预计此处持续时间在00到06之间的输出为15910秒。

首先我解析日期/时间:

dat$Timestamp <- strptime(dat$Timestamp, format="%Y-%m-%d %H:%M:%S") 

然后,我会使用difftime抓住每个观测之间的秒:

secs <- as.numeric(difftime(tail(dat$Timestamp, -1), head(dat$Timestamp, -1), 
          units="secs")) 

最后,我想总结的秒数在每个间隔的值大于1:

sum(secs[head(dat$Value, -1) > 1]) 
# [1] 15910 

假设t他的你感兴趣的时间界限出现在时间戳字段,可以限制到感兴趣的时间范围(开始于begin.timeend.time结束)的东西,如:

dat.subset <- dat[dat$Timestamp >= begin.time & dat$Timestamp <= end.time,] 

数据:

dat <- data.frame(Timestamp = c("2015-10-01 00:00:00", "2015-10-01 00:00:55", "2015-10-01 00:25:10", "2015-10-01 01:05:40", "2015-10-01 02:05:40", "2015-10-01 04:05:40", "2015-10-01 05:00:00", "2015-10-01 06:00:00"), Value = c(300, 200, 0, 876, 989, 0, 600, 300)) 
+0

现在还有更多这个问题。我拥有超过一年的数据,格式与我的主要问题(时间戳,值)中指定的格式相同。每天有不同的班次(12到6,6到9等)。我已经使用xts/split功能提取数据。我需要做的是让任何特定日期的记录在12到6之间,如果我对任何班次的第一个记录(“00:00:00”,NA)有“NA”值,那么我需要看看记录上一次班次的最后一个记录,并将相同的值用于当前记录... –

+0

---------------------------- --------- + |时间戳值| 2015-09-39 23:58:59 600 | 2015-10-01 00:00:00不适用| | 2015-10-01 00:00:55 200 | | 2015-10-01 00:25:10 0 | | 2015-10-01 01:05:40 876 | | 2015-10-01 02:05:40 989 | | 2015-10-01 04:05:40 0 | | 2015-10-01 05:00:00 600 | | 2015-10-01 05:55:00 300 –

+0

@AspiringDataScientist听起来好像你现在在问一个新问题(如何计算时间序列数据集中的缺失值)。我鼓励你使用页面顶部的“Ask Question”链接来提出一个新的问题,如果它提供了有用的上下文,就提供了这个问题的链接。 – josliber