我的工作「的定位數據的人員活動數據集」數據集從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的時間戳。
我的工作「的定位數據的人員活動數據集」數據集從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的時間戳。
首先,我們需要用冒號分隔毫秒從秒到點,否則最後一步將不起作用(感謝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"
我已經學會了這個不錯的把戲here。 This 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
結合使用。%U
一年中的一週爲十進制數(00-53),使用星期日作爲一週中的第一天(並且通常以一年的第一個星期日作爲第一週的第一天)。美國的公約。%w
平日爲十進制數(0-6,星期日爲0)。%W
使用星期一作爲星期的第一天(通常以第一週的第一天的一年的第一個星期一)作爲十進制數(00-53)的一週。英國公約。%y
沒有世紀的一年(00-99)。在輸入時,值00到68以20和69到99乘19爲前綴%Y
年份與世紀。請注意,雖然原格里曆中沒有零,但ISO 8601:2004將其定義爲有效(解釋爲1BC)a)您不需要'as.Date()'的長格式。 b)在'strptime()'周圍包裝as.POSIXct()'並且你得到更緊湊的POSIXct。 c)你錯過了亞秒。這需要'gsub()'或其他格式,因爲格式需要一個點;冒號不起作用。 –
@DirkEddelbuettel,感謝您的支持,我想知道這些是否真的是亞秒或什麼。老實說,我不知道如何處理它們。你會告訴我們(也許通過編輯帖子)? –
我認爲從幫助頁面發佈整個轉換格式表是浪費空間。最好鏈接到某個人可以找到它的頁面,或者只是「strptime」。 –
最後三位數字代表什麼? –
你好Soroosh。看看'lubridate'軟件包。 –