本節書摘來自華章出版社《資料科學:r語言實作》一 書中的第3章,第3.4節,作者:r for data science cookbook 丘祐玮(david chiu),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
把每一個資料屬性轉換成合适的資料類型之後,我們可以看到employees和salaries中的一些屬性是日期類型的。是以,我們可以計算雇員的出生日期和目前日期之間的年份數,進而得出每個雇員的年齡。這裡我們會介紹如何使用内置日期函數和lubridate程式包來操作日期格式的資料。
準備工作
按照之前的教程,把導入資料的每個屬性轉換成正确的資料類型。并且,你需要按照3.2節“重命名資料變量”中的步驟,命名employees和salaries資料集的列名。
實作步驟
執行下列步驟,使用employees和salaries中的日期格式資料。
1.我們可以使用下列代碼,加上或者減去日期格式屬性中的一些天數:
運作原理
完成上一個教程之後,employees資料和salaries資料應該完成了重命名,每一個屬性也應該轉換成了合适的資料類型。由于一些屬性是日期類型的,我們可以使用日期函數來計算屬性之間的時間間隔。
日期類型的資料支援算術運算,我們可以加上或減去一些天數。是以,我們首先展示了可以給hire_date加上30天。然後我們可以檢查一下受雇日期是否真的加了30天。然後,我們可以計算birth_date屬性和hire_date屬性之間以天為機關的時間間隔,進而找出雇員開始在公司工作時的年齡。然而,減法操作隻能告訴我們天數間隔,我們需要更多計算方法,支援除天數以外的時間間隔度量。是以,我們可以使用函數difftime确定不同機關下的時間間隔(例如,小時、天和周)。雖然difftime提供了更多的度量選擇,但我們還需要更多計算來得到以月和年為機關的時間間隔。
為了簡化日期計算,我們可以使用便捷的日期運算程式包lubridate。因為資料是年-月-日的格式,我們首先可以使用函數ymd把資料轉換成posix格式。然後,我們可以使用區間函數計算hire_date和birth_date之間的時間跨度。接着,我們可以使用函數as.period計算時間跨度的長度。這可以讓我們使用函數year擷取每一個雇員生日和受雇日之間的年份數。
最後,為了計算雇員的年齡,我們可以使用函數now擷取目前時間。然後,使用interval擷取雇員生日和目前日期之間的時間區間。利用這些資訊,我們最終可以使用函數year擷取雇員的真實年齡。
更多技能
在使用lubridate程式包(版本1.3.3)的時候,你可能會收到下列報錯資訊:
這個報錯資訊是由于本地配置問題而産生的。你可以通過設定locale為english_united states.1252來解決: