R語言處理日期數據

《R語言實戰》學習筆記 —— 基本數據管理之日期值

1. 創建日期型變量

日期型通常以字符串形式輸入到R中,然後轉化爲以數值形式存儲的日期變量。日期具有一定的格式,見下表:

表1 日期格式
符號 含義 示例
%d 數字表示的日期(0~31) 01~31
%a 縮寫的星期名 Mon
%A 非縮寫的星期名 Monday
%m 月份(00~12) 00~12
%b 縮寫的月份 Jan
%B 非縮寫的月份 January
%y 兩位數的年份 07
%Y 四位數的年份 2007
日期值得默認輸入格式爲yyyy-mm-dd。例如語句:

mydates <- as.Date(c("2007-06-22", "2004-01-21"))

將默認格式的字符串轉換爲對應日期。相反,

strDates <- c("01/05/1965", "06/16/1975")
dates <- as.Date(strDates, "%m/%d/%Y")

則使用mm/dd/yyyy的格式讀取數據

在前面leadship數據框中,日期列時以mm/dd/yyyy的格式編碼爲字符型變量的。可以通過下面語句轉換爲日期型數據:

leadship$testDate <- as.Date(leadship$testDate,"%m/%d/%Y")

2. 計算和處理日期型變量

# 下面兩個函數可以返回當前的日期和時間

> Sys.Date()
[1] "2018-01-28"
> date()
[1] "Sun Jan 28 21:53:57 2018"

# 可以使用format()函數來輸出指定格式的日期值,或提取日期值得某些部分

> today <- Sys.Date()
> format(today, format="%B %d %Y")

[1] "一月 28 2018"
> format(today, format="%A")
[1] "星期日"

# R的內部存儲日期時,是使用自1970年1月1日以來的天數表示的,更早的日期則表示爲負數
# 日期值上可以進行算術運算

> startDate <- as.Date("2004-02-13")
> endDate <- as.Date("2011-01-22")
> days <- endDate - startDate
> days

Time difference of 2535 days

輸出結果爲2004年2月13日和2011年1月22日之間的天數

# 可以使用函數difftime()來計算時間間隔,並以星期、天、時、分、秒來表示

假設某人的出生日期是1991年6月17日,則:

> today<- Sys.Date( )

> dob <- as.Date("1991-10-12")
> difftime(today, dob, units = "weeks")

Time difference of 1372.143 weeks
> difftime(today, dob, units = "days")
Time difference of 9605 days

那麼,這個人到今天爲止已經有1372周或者說9605天大了。他出生在星期幾呢?

3. 將日期轉換爲字符型變量

> strDates <- as.character(dates)

進行轉換後就可以使用一系列字符處理函數來處理數據(如子集、替換、連接等)

更進一步地,

  • 查看help(as.Date)和help(strftime),瞭解字符型轉換爲日期的更多細節;
  • 參考help(ISOdatetime),瞭解更多關於日期和時間格式的知識;
  • lubridate包中有許多簡化日期處理的函數,可用於識別和解析日期-時間數據,抽取日期-時間成分,以及進行算術運算
  • fCalendar包可以幫助對日期進行復雜的計算,提供大量的日期處理函數,可以同時處理多個時區,提供複雜的歷法操作功能,支持工作日、週末和假期。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章