R: объекты времени данных в кадре данных - PullRequest
1 голос
/ 19 января 2012
> my.lt <- strptime("2003-02-05 03:00:02", format="%Y-%m-%d %H:%M:%S")
> x <- data.frame(d=my.lt)
> class(x$d)
[1] "POSIXct" "POSIXt" 

Я не знаю, почему data.frame изменил x $ d с объекта POSIXlt на объект POSIXct.Теперь, если я сделаю

> x$d = my.lt

Тогда я получу то, что хочу, но это ужасно.Кто-нибудь может мне сказать 1) Почему это произошло;и 2) Как аккуратно инициализировать фрейм данных, когда один из его столбцов является POSIXlt.

Спасибо.

1 Ответ

5 голосов
/ 19 января 2012

Как сказано в 3-м абзаце раздела Подробности ?data.frame:

'data.frame' преобразует каждый из своих аргументов в кадр данных, вызывая 'as.data.frame(необязательно = TRUE) '.

Это означает, что as.data.frame.POSIXlt вызывается.Он определяется как:

function (x, row.names = NULL, optional = FALSE, ...) 
{
    value <- as.data.frame.POSIXct(as.POSIXct(x), row.names, 
        optional, ...)
    if (!optional) 
        names(value) <- deparse(substitute(x))[[1L]]
    value
}

Вот почему это произошло.Я не могу придумать чистого способа сделать это с помощью конструктора data.frame, но здесь есть небольшой кусочек:

x <- data.frame(d=as.data.frame.vector(my.lt))

Это преобразует ваш POSIXlt объект в data.frame, используяvector метод.Если вы действительно хотите потом запутаться, вы также можете использовать метод POSIXct:

x <- data.frame(d=as.data.frame.POSIXct(my.lt))
str(x)
# 'data.frame':   1 obs. of  1 variable:
#  $ my.lt: POSIXlt, format: "2003-02-05 03:00:02"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...