2012-01-18 77 views
1
> 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對象。現在如果我做R:數據幀中的數據時間對象

> x$d = my.lt 

然後我得到了我想要的,但這是醜陋的。有人可以告訴我1)爲什麼發生這種情況;和2)如何以一種簡潔的方式將其中一列作爲POSIXlt來初始化數據幀。

謝謝。

回答

5

正如在?data.frame詳細信息部分的第3段表示:

「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對象轉換爲使用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" 
+0

+1尼斯的答案。 – Andrie 2012-01-18 21:38:37