рекомендации

воскресенье, 5 июля 2015 г.

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


Классы POSIXt соответствуют стандарту POSIX. В R имеются два подкласса POSIXt: POSIXct и POSIXlt. Класс POSIXct представляет дату и время как знаковое количество секунд (включая доли секунды) с полночи по Гринвичу (UTC) 1 января 1970 года. Класс POSIXlt представляет дату и время как именованный список элементов для секунд (sec), минут (min), часов (hour), дня месяца (mday), месяца (mon), года (year), дня недели (wday), дня года (yday) и флага летнего времени (isdst).
Создание объектов класса POSIXct

Вы можете создать объект класса POSIXct из символьной строки, представляющей дату и время, с помощью функции as.POSIXct(). По умолчанию дата должна быть в формате “YYYY-mm-dd hh:mm:ss” или; часы, минуты и секунды необязательны.

 
> myDateTimeStr = "2013-12-19 10:17:07"
> myPOSIXct = as.POSIXct(myDateTimeStr)
> myPOSIXct
[1] "2013-12-19 10:17:07 PST"
> class(myPOSIXct)
[1] "POSIXct" "POSIXt"
> as.numeric(myPOSIXct)
[1] 1.387e+09
Если при этом с помощью необязательного аргумента tz не задан часовой пояс, его значение по умолчанию равно системному часовому поясу, который можно определить с помощью функции Sys.timezone():

> Sys.timezone()
[1] "PST"
Спецификация часового пояса - это атрибут объекта POSIXct.

> attributes(myPOSIXct)
$class
[1] "POSIXct" "POSIXt"
$tzone
[1] ""
Если формат даты отличается от принятого по умолчанию, используйте дополнительный аргумент format:

> myDateTimeStr1 = "19-12-2003 10:17:07"
> myPOSIXct1 = as.POSIXct(myDateTimeStr1,format="%d-%m-%Y%H:%M:%S")
> myPOSIXct1
[1] "2003-12-19 10:17:07 PST"

Самый распространенный набор кодов для представления дат в стандарте POSIX представлен в таблице ниже. Описание этих кодов можно найти в файле помощи по функции strptime().

Код
Описание
Пример
Код
Описание
Пример
%a
сокращенный день недели
Mon
%A
Полный день недели
Monday
%b
аббревиатура месяца
Jan
%B
Полный месяц
January
%c
Дата и время в местном формате

%d
день месяца
01
%H
Часы (24-часовой формат)
16
%I
Часы (12-часовой формат)
08
%j
День года
234
%m
Месяц
07
%M
Минуты
12
%p
Индикатор AM/PM

%S
Секунды
35
%U
Номер недели в году (начинается с воскресенья)

%w
День недели
1
%W
Номер недели в году (начинается с понедельника)

%x
Дата в местном формате

%X
Время в местном формате

%y
Двухзначный год
91
%Y
Четырехзначный год
1991
%z
Полное название часового пояса

%Z
Аббревиатура часового пояса
PST

Поскольку объекты POSIXct хранят дату и время как количество секунд, прошедшее с некоторой начальной даты, вы всегда можете создать такой объект из числа.

> numDate = 0
> myPOSIXct2 = as.POSIXct(0, origin="1970-01-01")
> myPOSIXct2
[1] "1969-12-31 16:00:00 PST"
> as.numeric(myPOSIXct2)
[1] 0
Так как PST (Pacific Standard Time) на 8 часов отстает от GMT/UTC, дата и время показаны как 1969‐12‐31 16:00:00 PST, а не 1970‐01‐01 UTC.  
Хотя числовое представление объекта по прежнему 0 (так как объекты POSIXct определяются как количество секунд с 1970‐01‐01 UTC), на отображение времени и выполнение арифметических операций с ним влияет спецификация часового пояса. Например, допустим я хочу прибавить 8 часов к myPOSIXct2.

> myPOSIXct3 = myPOSIXct2 + 8*60*60
> myPOSIXct3
[1] "1970-01-01 PST"
> as.numeric(myPOSIXct3)
[1] 28800

Во многих случаях удобнее задавать дату и время в GMT (UTC), чтобы избежать путаницы при выполнении различных операций.

> myPOSIXct4 = as.POSIXct(0, origin="1970-01-01", tz="UTC")
> myPOSIXct4
[1] "1970-01-01 UTC"
> as.numeric(myPOSIXct4)
[1] 0
Вы можете установить системный часовой пояс GMT (UTC) с помощью Sys.setenv(TZ="UTC"), чтобы он отображался в качестве умолчательного при вызове as.POSIXct().
Вы также можете создавать объекты POSIXct напрямую из числовых данных с помощью функции ISOdatetime(), задавая индивидуальные компоненты даты и времени, а также часовой пояс в символьном вде
> myPOSIXct5 = ISOdatetime(year=2013, month=12, day=19,
+
hour = 10, min = 17, sec = 7,
+
tz = "")
> class(myPOSIXct5)
[1] "POSIXct" "POSIXt"
> myPOSIXct5

[1] "2013-12-19 10:17:07 PST"

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

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