我试图找出一分钟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
...
我在这里缺少什么?我不明白的是什么?
答案 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()函数类似(简单) (我制作了这个社区维基,以防其他人想要添加完整补丁。)