2014-08-27 59 views
0

最近我在R的日期中更頻繁地接觸日期。但是,我總是覺得我沒有正確處理它們。通常我使用strptime將某個字符串格式轉換爲日期。最近我在R中遇到了as.Date。應該使用哪個通用規則?兩者的差異/優點/缺點是什麼?也許還有更好的課程?R的差異時間課程

有一兩件事我注意到的是以下幾點:一巡航能力日期as.Date我可以輕鬆地添加天,即

> as.Date("10-05-2014",format="%d-%m-%Y") + 1 
[1] "2014-05-11" 

簡單地增加有一天,當

> strptime("10-05-2014",format="%d-%m-%Y") + 1 
[1] "2014-05-10 00:00:01 CEST" 

增加默認秒。也許人們也可以輕鬆添加一天?

感謝您的見解

+1

你應該看看'lubridate'。 – 2014-08-27 17:29:53

+0

爲了將來的參考,請查看'difftime'和'ISOdate'。在使用日期/時間時,我發現那些幫助很大。 – 2014-08-27 18:20:22

回答

3

快速摘要:

  • Date對象在內部存儲爲天從日期零的整數號(通常爲1970至01年-01)
  • POSIXt objects(POSIXct or POSIXlt,後者是strptime創建)做同樣的事情,而是存儲在幾秒鐘內(非常粗略地講)

這也是爲什麼1天增加一個Date對象的增量,但通過增加1至POSIXt對象增量一秒。特別

POSIXlt對象是特殊的,因爲不像POSIXct對象,你可以添加其他時間元素:

ltDate <- strptime("10-05-2014",format="%d-%m-%Y") # produces POSIXlt object 
ltDate$mday <- ltDate$mday + 1      
ltDate 
# [1] "2014-05-11" 
unlist(ltDate)   # POSIXlt objects are stored as lists of date elements 
# sec min hour mday mon year wday yday isdst 
# 0  0  0 11  4 114  6 129  1 

而且,看到這個blog entry瞭解更多詳情。

總結:

  • 使用Date對象,如果你不在乎一天的時間
  • 使用POSIXlt對象,如果你打算做日期計算
  • 使用POSIXct對象,如果你不在乎關於一天的時間,但不需要做複雜的日期算術(即你只需要添加秒,小時 - 3600秒,天 - 24 * 3600秒等)。

而且,理查德指出,包lubridate提供的工具來完成一些較複雜的日期操作您通常會做POSIXltPOSIXct對象。由於POSIXct對象更簡單,更小,因此最好使用它們。

+0

輝煌!正是我正在尋找的!非常感謝! – math 2014-08-27 17:40:17

1

嘗試:

time1 <- strptime("10-05-2014",format="%d-%m-%Y") 
time1$mday <- time1$mday+1 
time1 
#[1] "2014-05-11 EDT" 
class(time1) 
#[1] "POSIXlt" "POSIXt" 

class(as.Date("10-05-2014",format="%d-%m-%Y") + 1) 
#[1] "Date"