[一天一點R]2.時間資料前處理(2)
除了as.Date()外,另外R還有常用的內建時間函數為 as.POSIXlt, as.POSIXlc,通稱POSIX類別。
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.這兩個物件,要透過那些函數達成上述的兩個目的。
時間轉換顯示格式
(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常用的資料格式與函數唷~明天見
參考資料