[一天一點R]2.時間資料前處理(2)

日期+時間(Date+time+時區): as.POSIXlt, as.POSIXlc.

Mora chen
5 min readAug 3, 2018

除了as.Date()外,另外R還有常用的內建時間函數為 as.POSIXlt, as.POSIXlc,通稱POSIX類別。

“beach shore etch with 2014 and 2015 texts during daytime” by Mohammed Fkriy on Unsplash

Date與POSIX兩者最大的不同,主要在於儲存的時間資訊量的不同,

Date存年、月、日、星期等信息;然而POSIX類別則可以儲存年、月、日、時、分、秒、時區、星期等訊息。

POSIXct, POSIXlt 是R系統中DataTimeClasses兩個物件
1. POSIXct代表的是總秒數從1970/1/1開始算起(R裡面的epoch)
2. POSIXlt則是一個列表,裡面有跟時間相關的數值(秒、分、時、日、月、年等)

透過class的函數,就能先確認你現在的時間資料格式為何

> class(Sys.time())
[1] “POSIXct” “POSIXt”

Sys.time()顯示現在系統的時間,時間格式為POSIXct、POSIXt。

Sys.time()
[1] “2018–08–03 21:21:12 CST”

“POSIXct” “POSIXt” 格式會顯示出現在的年、月、日、時間與時區,而這邊的CST就是時區的意思,台灣採用中原標準時間(Chungyuan Standard Time;CST)[我還記得小時候不能常看電視,最常的娛樂就是聽廣播,整點到的時候,收音機就會傳出..”現在是中原標準時間..幾點整”,寫到這有種好熟悉與懷念的感覺,哈哈..離題了…]

資料分析的時間前處理,通常主要有兩個目的:

一為轉換成你需要的時間資料格式,

二為從時間函數中萃取出時間參數,

因此,今天主要說明as.POSIXlt, as.POSIXlc.這兩個物件,要透過那些函數達成上述的兩個目的。

時間轉換顯示格式

時間轉換格式對應表(https://www.stat.berkeley.edu/~s133/dates.html)

(1)當你資料原本就是時間資料格式,透過format這個函數,就可以根據自己的需求,輸出特定格式的時間資料。

format(Sys.time(), "%Y-%m-%d")[1] “2018–08–03”

(2)如果你的資料格式是字串,則要使用as.POSIXct,as.POSIXlt與設定參數format就可以轉換成特定的資料格式囉。

a=as.POSIXct("2014-05-01", format="%Y-%m-%d")b=as.POSIXlt("2014-05-01", format="%Y-%m-%d")

a,b的結果相同皆為”2014–05–01 CST”

這時你會有一個疑問,這樣的時間格式可以加減嗎?

Q1:a+100?

你猜到了嗎?

POSIXct的時間單位為秒,a+100就變成”2014–05–01 00:01:40 CST”,是不是很方便。

但秒是時間的最小單位,使用上會有點麻煩,如果要以天為計算的最小單元,就必須先轉換成as.Date()。

as.Date(Sys.time()) + 10[1] “2018–08–13”

萃取時間參數

當你的時間格式為POSIX類別,formate也可以用來萃取時間參數

(1)顯示年分

format(a,format = “%Y”)[1] “2014”

(2)顯示星期

format(a,format = “%w”)[1] “4”

(3)顯示早上還是下午

format(a,format = “%p”)[1] “上午”

一邊寫一邊整理,才發現原來R處理時間的資料格式與函數很多,但之前從來沒有靜下心好好整理,有時候會因為沒有整體的概念,在寫程式會有很多時間在try and error,希望透過一系列有綜整式的整理,能大大減少試誤的時間,明天再繼續介紹,R常用的資料格式與函數唷~明天見

--

--

Mora chen

資料科學家與生活實踐者,心理學是我的興趣,期許自己能透過資料、心理與烹煮讓生活與世界更美好,逐步累積,https://morachen.netlify.com/