从特定分钟的微小xts对象获取数据

时间:2011-12-26 00:38:11

标签: r finance xts

我试图找出一分钟xts数据的特定行(在一天中的特定时刻)。我尝试过几件事,但只有一件奇怪的事情可以解决。

> last(UpRatio["T10:14:00/T10:15:00"])
                TICK.NYSE.Close
2011-12-23 10:15:00       0.7608696

这也有效:

  

UpRatio [with(as.POSIXlt(index(UpRatio)),(hour == 10& min == 15)),]

                    TICK.NYSE.Close
2011-12-23 10:15:00       0.7608696

如果我尝试做最直观的事情,那么在期待单行时我什么也得不到。为什么下面的代码不起作用?

> UpRatio["T10:15:00"]
 TICK.NYSE.Close

如果我尝试做下一个显而易见的事情,我会得到整个xts对象:

> UpRatio["10:15:00"]
                TICK.NYSE.Close
2011-12-23 09:30:00       1.0000000
2011-12-23 09:31:00       1.0000000
2011-12-23 09:32:00       1.0000000
2011-12-23 09:33:00       1.0000000
2011-12-23 09:34:00       0.8000000
2011-12-23 09:35:00       0.8333333
2011-12-23 09:36:00       0.8571429
2011-12-23 09:37:00       0.8750000
2011-12-23 09:38:00       0.7777778
2011-12-23 09:39:00       0.8000000
2011-12-23 09:40:00       0.8181818
2011-12-23 09:41:00       0.7500000
2011-12-23 09:42:00       0.6923077
2011-12-23 09:43:00       0.7142857
2011-12-23 09:44:00       0.6666667
2011-12-23 09:45:00       0.6250000
2011-12-23 09:46:00       0.6470588
2011-12-23 09:47:00       0.6666667
2011-12-23 09:48:00       0.6315789
2011-12-23 09:49:00       0.6500000
2011-12-23 09:50:00       0.6666667
2011-12-23 09:51:00       0.6818182
2011-12-23 09:52:00       0.6956522
2011-12-23 09:53:00       0.7083333
2011-12-23 09:54:00       0.7200000
2011-12-23 09:55:00       0.7307692
2011-12-23 09:56:00       0.7407407
2011-12-23 09:57:00       0.7500000
2011-12-23 09:58:00       0.7586207
2011-12-23 09:59:00       0.7666667
2011-12-23 10:00:00       0.7419355
2011-12-23 10:01:00       0.7500000
2011-12-23 10:02:00       0.7575758
2011-12-23 10:03:00       0.7647059
2011-12-23 10:04:00       0.7428571
2011-12-23 10:05:00       0.7500000
2011-12-23 10:06:00       0.7567568
2011-12-23 10:07:00       0.7631579
2011-12-23 10:08:00       0.7692308
2011-12-23 10:09:00       0.7750000
2011-12-23 10:10:00       0.7804878
2011-12-23 10:11:00       0.7857143
2011-12-23 10:12:00       0.7906977
2011-12-23 10:13:00       0.7954545
2011-12-23 10:14:00       0.7777778
2011-12-23 10:15:00       0.7608696
2011-12-23 10:16:00       0.7446809
...

我在这里缺少什么?我不明白的是什么?

3 个答案:

答案 0 :(得分:2)

当前时间子集当前仅适用于范围。您可以使用UpRatio["T10:14:59.999/T10:15:00"]代替last(UpRatio["T10:14:00/T10:15:00"])。另请注意,这将在对象中返回每天的10:15时间。

答案 1 :(得分:0)

如果你使用完整的日期戳,那么它就像你期望的那样工作:

UpRatio["2011-12-23 10:15:00"]

如果您想要所有天的10:15:00吧,这比您的POSIXlt版本更短(更清晰):

UpRatio[grepl('10:15:00',index(UpRatio)]

答案 2 :(得分:0)

或者,攻击source。例如。就在这个街区之后:

if(length(i) == 1 && !identical(integer(),grep("^T.*?/T",i[1]))) { ... }

你可以写(未经测试):

else if(length(i) == 1 && !identical(integer(),grep("^T.*?",i[1]))) {
    i <- gsub("T|:","",i)
    i <- .makeISO8601T(x, i[1])
}

然后你必须写makeISO8601T();这与parse8601.T末尾的makeISO8601TT()函数类似(简单) (我制作了这个社区维基,以防其他人想要添加完整补丁。)