lubridateTrong quá trình phân tích dữ liệu, chúng ta sẽ thường gặp phải những vấn đề liên quan đến việc xử lý các biến date hoặc date-time. Trong bài viết này, mình sẽ hướng dẫn các bạn sử dụng một số hàm cơ bản trong package lubridate để xử lý các biến date và date-time.
Trong R dữ liệu liên quan đến thời gian có 2 kiểu định dạng:
date: 2018-08-01
date-time: 2018-08-01 16:35:52 (ngày giờ cụ thể)
Package lubridate là 1 package rất hữu dụng để xử lý date và date-time.
Để lấy thông tin ngày, tháng, năm của date chúng ta có thể sử dụng hàm day(), month(), year() tương ứng.
## [1] "2023-05-04"
## [1] "Date"
## [1] 4
## [1] 5
## [1] 2023
Trong trường hợp chúng ta muốn xem hôm nay là thứ mấy, sử dụng hàm wday() và thêm option label = T.
## [1] Thu
## Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
Nếu chúng ta muốn xem ngày trong tháng hoặc ngày trong năm, sử dụng hàm mday() và yday() tương ứng.
## [1] 4
## [1] 124
Chúng ta có thể dùng các hàm hour(), minute(), second() để biết được giờ, phút, giây của date-time.
## [1] "2023-05-04 11:39:30 +07"
## [1] "POSIXct" "POSIXt"
## [1] 11
## [1] 39
## [1] 30.50807
Nếu muốn cập nhật lại giờ phút giây của date-time, chúng ta có thể dùng hàm update() và thêm các option hours, minutes, seconds như mong muốn.
# Giả sử chúng ta cập nhật lại ngày giờ của ngày hiện tại là 15 giờ 30 phút 20 giây
update(now,
hours = 15,
minutes = 30,
seconds = 20)## [1] "2023-05-04 15:30:20 +07"
Chúng ta có thể dễ dàng chuyển định dạng từ date-time sang date bằng việc sử dụng hàm as.Date().
## [1] "2023-05-04"
Chúng ta có thể nhập thông tin một ngày nhất định một cách dễ dàng bằng việc sử dụng các hàm như ymd(), dmy(), ymd_hms()…
## [1] "2010-12-15"
## [1] "2017-04-01"
## [1] "2014-08-23 17:23:02 UTC"
Để xem ngày giờ cụ thể tại các quốc gia có múi giờ khác nhau, chúng ta có thể sử dụng hàm with_tz(). Danh sách các múi giờ cụ thể trong lubridate có thể xem tại đây: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
## [1] "Asia/Bangkok"
## [1] "2023-05-04 11:39:30 +07"
## [1] "2023-05-04 00:39:30 EDT"
Để có thể thực hiện một số phép tính toán với thời gian như: sau ngày hiện tại x ngày là ngày bao nhiêu, sau ngày hiện tại x tháng là ngày bao nhiêu… chúng ta có thể lấy ngày đó + một trong các hàm sau tùy theo mục đích: days(), months(), years(), hours(), minutes(), seconds().
## [1] "2023-05-06"
## [1] "2023-05-02"
## [1] "2023-07-04"
## [1] "2025-05-04"
## [1] "2023-05-04 13:39:30 +07"
## [1] "2023-05-04 11:41:30 +07"
## [1] "2023-05-04 11:39:32 +07"
Chúng ta có thể tính toán thời gian giữa 2 ngày bất kỳ bằng việc sử dụng hàm as.period().
# Giả sử chúng ta muốn tính toán xem từ ngày 29/12/1992 đến nay là bao lâu?
day_past <- ymd(19921229)
# Tạo khoảng thời gian từ 29/12/1992 đến nay: dùng hàm interval()
how_long <- interval(day_past, today)
# Tính toán thời gian bao lâu
as.period(how_long)## [1] "30y 4m 5d 0H 0M 0S"
# Có thể thêm option unit để quy đổi ra ngày, tháng hay năm: giả sử quy đổi ra ngày
as.period(how_long, unit = "days")## [1] "11083d 0H 0M 0S"
Như vậy, chúng ta đã vừa được làm quen với một số hàm cơ bản trong package lubridate để xử lý date và date-time. Chúc các bạn học tập và làm việc hiệu quả!