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