2013-07-31 61 views
1

我有一個數據幀df與包含時間戳列time和功能from.timestamp試圖映射時間戳的日期中的R數據幀

from.timestamp = function(timestamp) { 
    return(as.POSIXlt(timestamp/1e3, origin="1970-01-01 00:00:00 GMT")) 
} 

該時間戳轉換爲日期類型。如何修改數據框以便將所有時間戳轉換爲日期?

我的做法

我想以下幾點:

df$time <- apply(as.array(df$time), MARGIN=1, FUN=from.timestamp) 

的爲time結果列條目看上去並不像一個日期,但相當數量的序列,例如,1.034, 59.000, 23.000, 7.000, 5.000, 113.000, 5.000, 157.000, 1.000

dput(df)給出:

structure(list(time = c(1370674741034, 1372671995085, 1370847555008, 1371456058556, 1372570911379, 1371937835807)), .Names = "time", row.names = 8831395:8831400, class = "data.frame") 
+4

'as.POSIXlt'是矢量化的,所以'df $ time < - from.timestamp(df $ time)'應該可以工作。 – Roland

+4

如果你想要日期,使用'as.Date'。如果你想要時間,可以使用'as.POSIXct'。除非需要提取組件(小時,分鐘等),否則不要轉換爲'POSIXlt'。不要將'POSIXlt'與'data.frame'一起使用,因爲它是一個比較慢的列表,它使用的內存比POSIXct。 – GSee

+0

如果有人能寫出一個提到矢量化或「轉換」的答案,並解釋我用'apply'觀察到的行爲,那將是非常好的。 – Peteris

回答

2

只是做

df$time <- from.timestamp(df$time) 

你得到奇怪的行爲的原因是因爲POSIXlt對象實際上列出,與年,月,日,等組件。在你的代碼中,applyfrom.timestamp收到一系列列表,它將它組合成一個列表。這樣做會從結果中刪除班級信息,這就是爲什麼你看到了你的奇數。這些奇數實際上是表示該日期時間的POSIXlt對象的各個組件:秒,分鐘,小時,月,月,年,日,日。