Menu
CoddyTech

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 1970
  • POSIXlt: 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ày

Trí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")
quiz iconTự kiểm tra

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 độ.

quiz iconTự kiểm tra

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 độ.

quiz iconTự kiểm tra

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 độ.

challenge icon

Thử thách

Trung bình

Tạ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:

  1. Chuyển chuỗi đầu vào thành khung dữ liệu
  2. Phân tích cột 'datetime' thành các đối tượng POSIXct
  3. Trích xuất thứ trong tuần của từng sự kiện
    • dùng hàm weekdays(). Ví dụ: weekdays(date) 
  4. 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),
      	...
      )
  5. Định dạng cột 'datetime' để chỉ hiển thị ngày theo định dạng "YYYY-MM-DD"
  6. Tạo cột mới time_category dự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"
  7. Sắp xếp khung dữ liệu theo ngày giờ ban đầu
  8. 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