У меня есть несколько списков измерений. В каждом списке форматировали timestramp как строку ("24.12.2009 21:00:07.0"), и я знаю, что каждое измерение в списке разделяется на 5 секунд. Я хочу объединить все данные в огромный data.frame в R. Впоследствии я хочу быть в состоянии легко получить доступ к разнице во времени двух измерений, таким образом, я, вероятно, должен преобразовать данные во что-то другое, чем символы.
Какой формат я должен использовать для хранения времен? Есть ли некоторый формат времени в некотором пакете, который я должен использовать?
Вам нужен (стандартный) 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 package - это чрезвычайно универсальный и хорошо документированный контейнер для матрицы с соответствующими индексами даты/времени.
.