понедельник, 3 августа 2015 г.

Работа с финансовыми временными рядами в R. Часть 3.2. Классы POSIXt (base R). Продолжение


Изменение формата вывода и извлечение компонентов  даты и времени

Вы можете изменять формат вывода объектов POSIXct, используя функцию format() с кодами формата, приведенными в таблице
  
> myPOSIXct
[1] "2013-12-19 10:17:07 PST"
> format(myPOSIXct, format="%b %d, %Y")
[1] "Dec 19, 2013"
Таким образом можно легко извлекать любой компонент объекта POSIXct:

> format(myPOSIXct, format="%B")
[1] "December"
> format(myPOSIXct, format="%Z")
[1] "PST"
> as.numeric(format(myPOSIXct, format="%Y"))
[1] 2013
> as.numeric(format(myPOSIXct, format="%S"))
[1] 7

Для объектов класса POSIXct вы также можете использовать функции weekdays(), months(), quarters() и Julian(). Как можно будет увидеть в следующей части, еще один способ извлечения компонентов - конвертировать POSIXct в POSIXlt, и затем извлечь список требуемых компонентов.


Функция format() позволяет также вам просмотреть дату и время в различных часовых поясах.

> myPOSIXct4
[1] "1970-01-01 UTC"
> format(myPOSIXct4, tz="")
[1] "1969-12-31 16:00:00"
> format(myPOSIXct4, tz="EST")
[1] "1969-12-31 19:00:00"
Создание объектов POSIXlt     

Создавать объекты POSIXlt вы можете с помощью функций as.POSIXlt() или  strptime().

> myDateTimeStr
[1] "2013-12-19 10:17:07"
> myPOSIXlt = as.POSIXlt(myDateTimeStr)
> myPOSIXlt
[1] "2013-12-19 10:17:07"
> class(myPOSIXlt)
[1] "POSIXlt" "POSIXt"
Если формат даты и времени отличается от стандартного, используйте опциональный аргумент format вместе с представленными в таблице кодами:

> myDateTimeStr1 = "19-12-2003 10:17:07"
> myPOSIXlt1 = as.POSIXlt(myDateTimeStr1, format="%d-%m-%Y %H:%M:%S")
Хотя объекты POSIXlt представляют собой списки именованных компонентов, имена компонентов скрыты.

> names(myPOSIXlt)
NULL
Увидеть их можно с помощью функции unclass().

> names(unclass(myPOSIXlt))
[1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday"
[9] "isdst"

Вы можете извлечь любой из этих компонентов.

> myPOSIXlt$sec
[1] 7
> myPOSIXlt$hour
[1] 10
> myPOSIXlt$mday
[1] 19
> myPOSIXlt$mon
[1] 11
> myPOSIXlt$year
[1] 113
> myPOSIXlt$wday
[1] 4
> myPOSIXlt$yday
[1] 352
> myPOSIXlt$isdst
[1] 0

Преобразование объектов POSIXct в POSIXlt и наоборот
Вы можете конвертировать объект POSIXct в POSIXlt и наоборот с помощью функций as.POSIXct() и as.POSIXlt() соответственно.
> myPOSIXct
[1] "2013-12-19 10:17:07 PST"
> class(myPOSIXct)
[1] "POSIXct" "POSIXt"
> myPOSIXlt = as.POSIXlt(myPOSIXct)
> class(myPOSIXlt)
[1] "POSIXlt" "POSIXt"
Одной из целью преобразования объекта POSIXct в объект POSIXlt может быть извлечение компонентов даты и времени. Например, получим значение секунд в myPOSIXct:

> as.POSIXlt(myPOSIXct)$sec
[1] 7
Преобразование объектов POSIXt в объекты класса Date и наоборот

Приведение к типу Date удаляет внутридневную информацию, а также данные о часовом поясе. Приведение Date к POSIXt добавляет поле часового пояса. Вы можете конвертировать объект POSIXt в Date с помощью функции as.Date().

> myPOSIXct
[1] "2013-12-19 10:17:07 PST"
> myDate = as.Date(myPOSIXct)
> myDate
[1] "2013-12-19"
> class(myDate)
[1] "Date"
Аналогично, вы можете конвертировать объект Date в POSIXt с помощью функций as.POSIXct() или as.POSIXlt().

> myPOSIXct = as.POSIXct(myDate)
> myPOSIXct
[1] "2013-12-18 16:00:00 PST"
> class(myPOSIXct)
[1] "POSIXct" "POSIXt"
Чтобы задать часовой пояс, вы должны сначала конвертировать объект Date в POSIXlt, а затем в  POSIXct.

> myPOSIXct = as.POSIXct(myDate, tz="GMT")
> myPOSIXct
[1] "2013-12-18 16:00:00 PST"
> myPOSIXlt = as.POSIXlt(myDate, tz="GMT")
> myPOSIXlt
[1] "2013-12-19 UTC"
> myPOSIXct = as.POSIXct(myPOSIXlt)
> myPOSIXct
[1] "2013-12-19 UTC"
Объекты класса POSIXt и высокочастотные данные

Объекты POSIXt могут представлять внутридневные интервалы времени менее секунды, используя тот факт, что формат допускает использование долей секунды. Пример:

> HfDateTimeStr = "2013-12-19 10:17:07.125"
> HfPOSIXct = as.POSIXct(HfDateTimeStr)
> HfPOSIXct
[1] "2013-12-19 10:17:07 PST"
Здесь задано 7 секунд и 125 миллисекунд. Просмотреть дробные части секунд можно следующим образом:

> options(digits.secs = 3)
> HfPOSIXct
[1] "2013-12-19 10:17:07.125 PST"
Работа с объектами POSIXt

Поскольку внутреннее представление объектов POSIXt является числом, вы можете их складывать и вычитать, а также выполнять с ними логические операции. Если у вас есть вектор из объектов POSIXt, вы можете применять к ним функции min(), max() и range().
Разность двух объектов POSIXt представляет собой объект класса difftime.

> dt1 = as.POSIXct("2013-12-23 00:00:00")
> dt2 = as.POSIXct("2013-12-23 05:00:00")
> diffDateTime = dt2 - dt1
> class(diffDateTime)
[1] "difftime"
> diffDateTime
Time difference of 5 hours
> units(diffDateTime)
[1] "hours"
> as.numeric(diffDateTime)
[1] 5
Единицы измерения объекта difftime можно изменить с помощью функции units().
> units(diffDateTime) = "secs"
> diffDateTime
Time difference of 18000 secs
> as.numeric(diffDateTime)
[1] 18000
Создавать внутридневные последовательности объектов POSIXct с регулярными промежутками времени проще всего с помощью метода-функции seq.POSIXct()). Например, мы хотим создать последовательность времен с 9:30 по 16:00, разделенных промежутком 5 секунд.

> startDate = as.POSIXct("2013-12-23 9:30:00")
> endDate = as.POSIXct("2013-12-23 16:00:00")
> dateSeq5sec = seq(from=startDate, to=endDate, by="5 sec")
> head(dateSeq5sec)
[1] "2013-12-23 09:30:00 PST" "2013-12-23 09:30:05 PST"
[3] "2013-12-23 09:30:10 PST" "2013-12-23 09:30:15 PST"
[5] "2013-12-23 09:30:20 PST" "2013-12-23 09:30:25 PST"
> tail(dateSeq5sec)
[1] "2013-12-23 15:59:35 PST" "2013-12-23 15:59:40 PST"
[3] "2013-12-23 15:59:45 PST" "2013-12-23 15:59:50 PST"
[5] "2013-12-23 15:59:55 PST" "2013-12-23 16:00:00 PST"
> length(dateSeq5sec)

[1] 4681

Комментариев нет:

Отправить комментарий