r语言 - 在特定时刻从分钟xts对象获取数据



我试图得到一个分钟文本数据的特定行(在一天中的特定分钟)。我试过好几种方法,但奇怪的是只有一种管用。

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

upatio [with(as.POSIXlt(index(upatio)), (hour == 10 &

                    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
...

我在这里错过了什么?我不明白的是什么?

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

如果您使用完整的日期戳,那么它将按照您的直觉工作:

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

如果你想从所有天的10:15:00条,这比你的POSIXlt版本更短(更清晰):

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

或者,破解源代码。例如,就在这个块之后:

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末尾找到的makeISO8601TT()函数类似(比它更简单)。T(我做了这个社区wiki,以防有人想要添加完整的补丁。)

最新更新