R:数据帧中的数据时间对象

时间:2012-01-18 20:42:55

标签: r datetime dataframe

> 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 个答案:

答案 0 :(得分:5)

正如?data.frame的详细信息部分第3段所述:

  

'data.frame'通过调用'as.data.frame(optional = 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构造函数来做到这一点的干净方法,但这里有点像kludge:

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

这会使用POSIXlt方法将您的vector对象转换为data.frame。如果您 以后想要混淆自己,您也可以使用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"