计算指定时间段内值为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.time
和end.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))
现在还有更多这个问题。我拥有超过一年的数据,格式与我的主要问题(时间戳,值)中指定的格式相同。每天有不同的班次(12到6,6到9等)。我已经使用xts/split功能提取数据。我需要做的是让任何特定日期的记录在12到6之间,如果我对任何班次的第一个记录(“00:00:00”,NA)有“NA”值,那么我需要看看记录上一次班次的最后一个记录,并将相同的值用于当前记录... –
---------------------------- --------- + |时间戳值| 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 –
@AspiringDataScientist听起来好像你现在在问一个新问题(如何计算时间序列数据集中的缺失值)。我鼓励你使用页面顶部的“Ask Question”链接来提出一个新的问题,如果它提供了有用的上下文,就提供了这个问题的链接。 – josliber