2009-12-25 44 views
45

我有多個測量列表。在每個列表中,timestramp都被格式化爲一個字符串(「2009-12-24 21:00:07.0」),並且我知道列表中的每個測量都被分隔5秒。 我想將所有數據合併到R中的一個巨大的data.frame中。之後,我希望能夠輕鬆訪問兩個測量的時差,所以我可能應該將數據轉換爲與字符不同的數據。處理R中的時間戳

我應該使用哪種格式來存儲時間?我應該使用某些包中的某種時間格式嗎?

回答

58

您希望(標準)從基礎R POSIXt類型可以在「緊湊的形式」可以了作爲POSIXct(其本質上是一個雙代表從epoch分數秒)或長形式中POSIXlt(其包含子-elements)。很酷的事情是,算術等都是在這個定義 - 見help(DateTimeClasses)

簡單的例子:

R> now <- Sys.time() 
R> now 
[1] "2009-12-25 18:39:11 CST" 
R> as.numeric(now) 
[1] 1.262e+09 
R> now + 10 # adds 10 seconds 
[1] "2009-12-25 18:39:21 CST" 
R> as.POSIXlt(now) 
[1] "2009-12-25 18:39:11 CST" 
R> str(as.POSIXlt(now)) 
POSIXlt[1:9], format: "2009-12-25 18:39:11" 
R> unclass(as.POSIXlt(now)) 
$sec 
[1] 11.79 

$min 
[1] 39 

$hour 
[1] 18 

$mday 
[1] 25 

$mon 
[1] 11 

$year 
[1] 109 

$wday 
[1] 5 

$yday 
[1] 358 

$isdst 
[1] 0 

attr(,"tzone") 
[1] "America/Chicago" "CST"    "CDT"    
R> 

至於閱讀它們,請參閱help(strptime)

至於區別,太容易了:

R> Jan1 <- strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S") 
R> difftime(now, Jan1, unit="week") 
Time difference of 51.25 weeks 
R> 

最後,zoo package是一個非常靈活和充分記錄容器的矩陣與相關的日期/時間e指數。

+13

謝謝。 爲R功能命名的人是殘酷的。我的意思是你應該怎麼猜測POSIXlt與時間有什麼關係? – Christian

+6

但'help.search(「date time」)'會發現相鄰的函數。 –

+3

@DirkEddelbuettel是的,這很有幫助。無論如何,這是不好的命名的藉口。代碼越可讀,不需要文檔就越好。 – nandinga