Получение данных из минутных объектов XTS в конкретную минуту - PullRequest
0 голосов
/ 26 декабря 2011

Я пытаюсь получить определенную строку (в определенную минуту дня) из данных xts за минуту. Я пробовал несколько вещей, но работает только одна странная вещь.

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

Это также работает:

UpRatio [с (as.POSIXlt (индекс (UpRatio)), (час == 10 и мин == 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 ]

2 голосов
/ 26 декабря 2011

Подмножество времени суток в настоящее время работает только с диапазоном. Вы можете использовать UpRatio["T10:14:59.999/T10:15:00"] вместо last(UpRatio["T10:14:00/T10:15:00"]). Также обратите внимание, что это вернет время 10:15 для каждый день для вашего объекта.

0 голосов
/ 28 декабря 2011

Или взломайте источник .Например, сразу после этого блока:

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 ();это будет похоже на (проще, чем) функцию makeISO8601TT (), найденную в конце parse8601.T (я создал эту вики сообщества, если кто-то еще хочет добавить полный патч.)

0 голосов
/ 28 декабря 2011

Если вы используете полную метку даты, то она работает так, как ожидала ваша интуиция:

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

Если вы хотите, чтобы бары 10:15:00 были от всех дней, это немного короче(и понятнее), чем ваша версия POSIXlt:

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