> 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。
谢谢。
答案 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"