R 在特定分钟从分钟xts对象获取数据

R 在特定分钟从分钟xts对象获取数据,r,finance,xts,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)),(小时=10分钟=15)),] 如果我试着做最直观的事情,我什么也得不到,而只期待一

我试图获取一分钟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)),(小时=10分钟=15)),]

如果我试着做最直观的事情,我什么也得不到,而只期待一行。为什么下面的代码不起作用

> 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(长度(i)==1&&!相同(整数(),grep(^T.*?,i[1])){

我对xts了解不多,但我认为问题在于您发送了一个字符来完成POSIX的工作(正如您在使用
as.POSIXlt
转换
character
时所演示的)。
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])
}