从时间序列中选择定期间隔

时间:2014-12-17 19:23:38

标签: r time-series xts zoo

我正在尝试根据不规则时间序列的确切时间来对间隔进行子集化。数据是每3秒测量的CO2浓度。当仪器连接到记录仪时,会有一些间隙。

我需要做的是,在一个月内将时间间隔为00:00:24到00:00:57和00:01:24到00:01:57。我将我的时间序列格式化为POSIXct并尝试通过 window(x)对“zoo”和“xts”对象进行子集化无效。另一个想法是创建重复标记或使用数字索引,但由于连接到中央日志记录设备,我每2小时缺少一些时间步。

我的数据如下:

12/1/2014 12:00:00 AM;   412.2;              
12/1/2014 12:00:03 AM;   412.1;              
12/1/2014 12:00:06 AM;   422.6;              
12/1/2014 12:00:09 AM;   427.7;              
12/1/2014 12:00:12 AM;   430.7;              
12/1/2014 12:00:15 AM;   430.5;              
12/1/2014 12:00:18 AM;   431.4;              
12/1/2014 12:00:21 AM;   432.9;              
12/1/2014 12:00:24 AM;   433.3;              
12/1/2014 12:00:27 AM;   433.6;              
12/1/2014 12:00:30 AM;   434.3;              
12/1/2014 12:00:33 AM;   434.4;              
12/1/2014 12:00:36 AM;   435.4;              
12/1/2014 12:00:39 AM;   434.3;             
12/1/2014 12:00:42 AM;   434.0;              
12/1/2014 12:00:45 AM;   434.1;              
12/1/2014 12:00:48 AM;   434.4;              
12/1/2014 12:00:51 AM;   434.5;              
12/1/2014 12:00:54 AM;   434.9;              
12/1/2014 12:00:57 AM;   434.7;             
12/1/2014 12:01:00 AM;   435.4;             
12/1/2014 12:01:03 AM;   435.0;             
12/1/2014 12:01:06 AM;   434.1;             
12/1/2014 12:01:09 AM;   432.4;             
12/1/2014 12:01:12 AM;   432.6;             
12/1/2014 12:01:15 AM;   433.3;             
12/1/2014 12:01:18 AM;   433.5;              

我将其导入为

library(zoo)
library(xts)
CO2 = read.csv(file="CO2_201412.csv", sep = ";", header = TRUE, stringsAsFactors = FALSE)

重新格式化索引

CO2[,1]=as.POSIXct(CO2[,1], tz='GMT', format="%m/%d/%Y %I:%M:%S %p")

并将其转换为xts-object

CO2xts = xts(CO2[,2], CO2[,1])

或zoo-object

CO2zoo = zoo(CO2[,2], CO2[,1])

我需要这样的工作:

CO2win = window(CO2xts, start=as.POSIXct('%Y-%m-%d %H:%M:24'),end=as.POSIXct('%Y-%m-%d %H:%M:57'))

如果我使用固定值,如

CO2win = window(CO2xts, start=as.POSIXct('2014-12-01 12:00:24'),end=as.POSIXct('2014-12-01 12:00:57'))

它就像一个魅力,但如上所述,我需要查询每个分钟的这个时间间隔,每个月的每一天。

由于这是我提出的第一个问题,我非常感谢有关该问题形成的任何意见。

1 个答案:

答案 0 :(得分:2)

喜欢这个吗?

sec <- as.integer(format(index(CO2xts),"%S"))
CO2xts[sec > 24 & sec < 57]
#                      [,1]
# 2014-12-01 00:00:27 433.6
# 2014-12-01 00:00:30 434.3
# 2014-12-01 00:00:33 434.4
# 2014-12-01 00:00:36 435.4
# 2014-12-01 00:00:39 434.3
# 2014-12-01 00:00:42 434.0
# 2014-12-01 00:00:45 434.1
# 2014-12-01 00:00:48 434.4
# 2014-12-01 00:00:51 434.5
# 2014-12-01 00:00:54 434.9