我正在尝试根据不规则时间序列的确切时间来对间隔进行子集化。数据是每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'))
它就像一个魅力,但如上所述,我需要查询每个分钟的这个时间间隔,每个月的每一天。
由于这是我提出的第一个问题,我非常感谢有关该问题形成的任何意见。
答案 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