Работа с метками времени в R - PullRequest
48 голосов
/ 26 декабря 2009

У меня есть несколько списков измерений. В каждом списке есть временная метка, сформатированная в виде строки («2009-12-24 21: 00: 07.0»), и я знаю, что каждое измерение в списке разделено на 5 секунд. Я хочу объединить все данные в огромный data.frame в R. Впоследствии я хочу иметь возможность легко получить доступ к разнице во времени двух измерений, поэтому мне, вероятно, следует преобразовать данные в нечто отличное от символов.

Какой формат мне следует использовать для хранения времени? Есть ли какой-то формат времени в каком-то пакете, который я должен использовать?

1 Ответ

65 голосов
/ 26 декабря 2009

Требуется (стандартный) тип POSIXt из базы R, который может иметься в «компактной форме» как POSIXct (что по сути является двойным числом, представляющим доли секунды с начала эпохи) или как длинная форма в POSIXlt (который содержит подэлементы). Круто то, что здесь определены арифметические и т. Д. - см. help(DateTimeClasses)

Быстрый пример:

R> now <- Sys.time()
R> now
[1] "2009-12-25 18:39:11 CST"
R> as.numeric(now)
[1] 1.262e+09
R> now + 10  # adds 10 seconds
[1] "2009-12-25 18:39:21 CST"
R> as.POSIXlt(now)
[1] "2009-12-25 18:39:11 CST"
R> str(as.POSIXlt(now))
 POSIXlt[1:9], format: "2009-12-25 18:39:11"
R> unclass(as.POSIXlt(now))
$sec
[1] 11.79

$min
[1] 39

$hour
[1] 18

$mday
[1] 25

$mon
[1] 11

$year
[1] 109

$wday
[1] 5

$yday
[1] 358

$isdst
[1] 0

attr(,"tzone")
[1] "America/Chicago" "CST"             "CDT"            
R> 

Что касается их чтения, см. help(strptime)

Что касается различий, то тоже легко:

R> Jan1 <- strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
R> difftime(now, Jan1, unit="week")
Time difference of 51.25 weeks
R> 

Наконец, пакет zoo является чрезвычайно универсальным и хорошо документированным контейнером для матрицы со связанными индексами даты / времени.

...