2013-09-28 62 views
3

我的工作「的定位數據的人員活動數據集」數據集從UCI在這個數據集有日期和時間(無論是在一列)與以下格式的列:如何將特定時間格式轉換爲R中的時間戳?

27.05.2009 14:03:25:777 
27.05.2009 14:03:25:183 
27.05.2009 14:03:25:210 
27.05.2009 14:03:25:237 
... 

我想知道是否有反向轉換此列使用R的時間戳。

+0

最後三位數字代表什麼? –

+0

你好Soroosh。看看'lubridate'軟件包。 –

回答

8

首先,我們需要用冒號分隔毫秒從秒到點,否則最後一步將不起作用(感謝Dirk Eddelbuettel爲這一個)。由於在終點R將使用它想要的分隔符,要快,我就繼續和替換所有的冒號的點:

x <- "27.05.2009 14:03:25:777" # this is a simplified version of your data 
y <- gsub(":", ".", x)   # this is your vector with the aforementioned substitution 

順便說一句,這是你的載體應該是什麼樣子gsub後:現在

> y 
[1] "27.05.2009 14.03.25.777" 

,纔能有它顯示毫秒,你首先需要調整的R選項,然後使用一個名爲strptime功能,將你的約會向量轉換爲POSIXlt(一種R型)格式。只要做到以下幾點:

> options(digits.secs = 3)   # this tells R you want it to consider 3 digits for seconds. 
> strptime(y, "%d.%m.%Y %H:%M:%OS") # this finally formats your vector 
[1] "2009-05-27 14:03:25.777" 

我已經學會了這個不錯的把戲hereThis other answer還表示您可以跳過options設置並使用,例如strptime(y, "%d.%m.%Y %H:%M:%OS3"),但它對我無效。 Henrik指出,function's help page, ?strptime指出%OS3位是依賴於操作系統的。我使用的是更新的Ubuntu 13.04,使用%OS3,產量爲NA

使用strptime(或其他與POSIX相關的功能,如as.Date),牢記一些最常用的轉換(在strptime編輯爲簡潔起見,由DWin所建議的完整列表。):

  • %a當前語言環境中的縮寫星期幾名稱。
  • %A當前語言環境中的完整週日名稱。
  • %b當前語言環境中的縮寫月份名稱。
  • %B當前語言環境中的全月名稱。
  • %d作爲十進制數(01-31)的月份中的一天。
  • %H小時數(00-23)。諸如24:00:00之類的時間被接受用於輸入。
  • %I小時數(01-12)。
  • %j作爲十進制數字(001-366)。
  • %m月份爲十進制數(01-12)。
  • %M分鐘爲十進制數(00-59)。
  • %p區域設置中的上午/下午指示符。與%I結合使用,而不是與%H結合使用。
  • `%S秒爲十進制數(00-61),允許最多兩個閏秒(但符合POSIX的實現將忽略閏秒)。
  • %U一年中的一週爲十進制數(00-53),使用星期日作爲一週中的第一天(並且通常以一年的第一個星期日作爲第一週的第一天)。美國的公約。
  • %w平日爲十進制數(0-6,星期日爲0)。
  • %W使用星期一作爲星期的第一天(通常以第一週的第一天的一年的第一個星期一)作爲十進制數(00-53)的一週。英國公約。
  • %y沒有世紀的一年(00-99)。在輸入時,值00到68以20和69到99乘19爲前綴
  • %Y年份與世紀。請注意,雖然原格里曆中沒有零,但ISO 8601:2004將其定義爲有效(解釋爲1BC)
+3

a)您不需要'as.Date()'的長格式。 b)在'strptime()'周圍包裝as.POSIXct()'並且你得到更緊湊的POSIXct。 c)你錯過了亞秒。這需要'gsub()'或其他格式,因爲格式需要一個點;冒號不起作用。 –

+0

@DirkEddelbuettel,感謝您的支持,我想知道這些是否真的是亞秒或什麼。老實說,我不知道如何處理它們。你會告訴我們(也許通過編輯帖子)? –

+3

我認爲從幫助頁面發佈整個轉換格式表是浪費空間。最好鏈接到某個人可以找到它的頁面,或者只是「strptime」。 –

相關問題