Xử lý ngày và giờ
Bài học 13 trên 14 trong khóa học Thao tác dữ liệu trong R của Coddy.
Ngôn ngữ này cung cấp các hàm và lớp dựng sẵn để làm việc hiệu quả với các đối tượng ngày giờ.
Các lớp ngày giờ trong R
R có ba lớp chính để làm việc với ngày giờ:
Date: Biểu thị ngày không có giờPOSIXct: Biểu thị ngày giờ dưới dạng số giây tính từ ngày 1 tháng 1 năm 1970POSIXlt: Biểu thị ngày giờ dưới dạng danh sách các thành phần (năm, tháng, ngày, v.v.)
Tạo đối tượng ngày giờ
Bạn có thể tạo đối tượng ngày giờ bằng các hàm sau:
# Tạo một đối tượng Date
today <- Sys.Date()
# Tạo một đối tượng POSIXct
now <- Sys.time()
# Chuyển một chuỗi thành Date
date_from_string <- as.Date("2023-06-15")
# Chuyển một chuỗi thành POSIXct
datetime_from_string <- as.POSIXct("2023-06-15 14:30:00")Định dạng đối tượng ngày giờ
Dùng format() để chuyển đối tượng ngày giờ thành chuỗi:
date <- as.Date("2023-06-15")
formatted_date <- format(date, "%B %d, %Y") # Trả về: "June 15, 2023"Phân tích chuỗi ngày giờ
Để phân tích chuỗi ngày giờ, hãy dùng as.Date() hoặc as.POSIXct() cùng với chuỗi định dạng:
date_string <- "15/06/2023"
parsed_date <- as.Date(date_string, format = "%d/%m/%Y")Tính toán với ngày giờ
R cho phép thực hiện các phép toán số học trên đối tượng ngày giờ:
today <- Sys.Date()
next_week <- today + 7 # Cộng thêm 7 ngày
time_diff <- as.numeric(next_week - today) # Tính chênh lệch theo ngàyTrích xuất các thành phần
Bạn có thể trích xuất các thành phần cụ thể từ đối tượng ngày giờ:
date <- as.Date("2023-06-15")
year <- format(date, "%Y")
month <- format(date, "%m")
day <- format(date, "%d")
hour <- format(date, "%H")
minute <- format(date, "%M")
second <- format(date, "%S")Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Thử thách
Trung bìnhTạo một hàm xử lý danh sách sự kiện cùng ngày và giờ của chúng. Hàm cần thực hiện các thao tác sau:
- Chuyển chuỗi đầu vào thành khung dữ liệu
- Phân tích cột 'datetime' thành các đối tượng POSIXct
- Trích xuất thứ trong tuần của từng sự kiện
- dùng hàm
weekdays(). Ví dụ:weekdays(date)
- dùng hàm
- Tính khoảng thời gian tính bằng giờ giữa từng sự kiện và sự kiện đầu tiên
Để lấy ngày giờ đầu tiên, hãy dùng:
mutate( datetime = as.POSIXct(datetime, format = "%Y-%m-%d %H:%M:%S"), first_date = min(datetime), ... )
- Định dạng cột 'datetime' để chỉ hiển thị ngày theo định dạng "YYYY-MM-DD"
- Tạo cột mới
time_categorydựa trên giờ diễn ra sự kiện:- Nếu giờ từ 5 đến 11 (bao gồm cả hai mốc), đặt thành "Morning"
- Nếu giờ từ 12 đến 16 (bao gồm cả hai mốc), đặt thành "Afternoon"
- Nếu giờ từ 17 đến 20 (bao gồm cả hai mốc), đặt thành "Evening"
- Nếu không, đặt thành "Night"
- Sắp xếp khung dữ liệu theo ngày giờ ban đầu
- Chỉ in khung dữ liệu kết quả với các cột sau (theo thứ tự này):
event, datetime, day_of_week, duration_hours, date, time_category
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
input_data <- suppressWarnings(readLines(con))
# Chuyển chuỗi đầu vào thành khung dữ liệu
events_df <- read.csv(text = input_data, stringsAsFactors = FALSE)
# TODO: Viết code bên dưới để xử lý khung dữ liệu sự kiện
# 1. Chuyển cột 'datetime' thành các đối tượng POSIXct
# 2. Lấy thứ trong tuần của từng sự kiện
# 3. Tính khoảng thời gian theo giờ giữa từng sự kiện và sự kiện đầu tiên
# 4. Định dạng cột 'datetime' để chỉ hiển thị ngày theo định dạng "YYYY-MM-DD"
# 5. Tạo cột mới 'time_category' dựa trên giờ diễn ra sự kiện
# 6. Sắp xếp khung dữ liệu theo datetime ban đầu
# In ra khung dữ liệu kết quả
print(events_df)Tất cả bài học trong Thao tác dữ liệu trong R
Tự luyện tập: Trình biên dịch R online