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

sun*_*unt 1 datetime r 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" 
Run Code Online (Sandbox Code Playgroud)

我不知道为什么data.frame将x $ d从POSIXlt对象更改为POSIXct对象.现在,如果我这样做

> x$d = my.lt
Run Code Online (Sandbox Code Playgroud)

然后我得到了我想要的东西,但这很难看.任何人都可以告诉我1)为什么会这样; 2)如何初始化一个数据框,其中一列是一个整齐的POSIXlt.

谢谢.

Jos*_*ich 5

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

'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
}
Run Code Online (Sandbox Code Playgroud)

这就是它发生的原因.我想不出使用data.frame构造函数做一个干净的方法,但这里有点像kludge:

x <- data.frame(d=as.data.frame.vector(my.lt))
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)