понимание дат / времени (POSIXc и POSIXct) в R
Я читаю таблицу, и она содержит строки, описывающие временные метки. Я просто хочу преобразовать строку во встроенный тип datetime...
R> Q <- read.table(textConnection('
tsstring
1 "2009-09-30 10:00:00"
2 "2009-09-30 10:15:00"
3 "2009-09-30 10:35:00"
4 "2009-09-30 10:45:00"
5 "2009-09-30 11:00:00"
'), as.is=TRUE, header=TRUE)
R> ts <- strptime(Q$tsstring, "%Y-%m-%d %H:%M:%S", tz="UTC")
Если я попытаюсь сохранить столбец datetime в данных.кадр, я получаю любопытную ошибку:
R> Q$ts <- ts
Error in `$<-.data.frame`(`*tmp*`, "ts", value = list(sec = c(0, 0, 0, :
replacement has 9 rows, data has 5
Но если я пройду через числовое представление, содержащееся в данных.кадр, он работает...
R> EPOCH <- strptime("1970-01-01 00:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")
R> Q$minutes <- as.numeric(difftime(ts, EPOCH, tz="UTC"), units="mins")
R> Q$ts <- EPOCH + 60*Q$minutes
Какая-нибудь помощь в понимании ситуации?1 ответ:
strptime
возвращает классPOSIXlt
, вам нужноPOSIXct
в фрейме данных:R> class(strptime("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) [1] "POSIXt" "POSIXlt" R> class(as.POSIXct("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) [1] "POSIXt" "POSIXct"
Класс
POSIXct
представляет собой (знаковое) число секунд с начала 1970 как числовой вектор. КлассPOSIXlt
- это именованный список векторов, представляющих sec, min, hour, mday, mon, year и т. д.R> unclass(strptime("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) $sec [1] 0 $min [1] 0 $hour [1] 10 $mday [1] 30 $mon [1] 8 $year [1] 109 $wday [1] 3 $yday [1] 272 $isdst [1] 0 attr(,"tzone") [1] "UTC" R> unclass(as.POSIXct("2009-09-30 10:00:00", "%Y-%m-%d %H:%M:%S", tz="UTC")) [1] 1.254e+09 attr(,"tzone") [1] "UTC"