Skip to content

Module 4: Strings & Dates 📅

📝 Stats

  • Số lượng: 10 câu hỏi
  • Độ khó: Trung bình
  • Mục tiêu: Clean data rác và parse ngày tháng chuẩn xác.

MCQ

Q1. Hàm ymd() của lubridate dùng để parse chuỗi nào sau đây?

  • [ ] "2024-01-30"
  • [ ] "30-01-2024"
  • [ ] "01-30-2024"
  • [ ] "2024/30/01"

Đáp án: "2024-01-30" (Year-Month-Day).

Q2. Regex pattern ^A.+z$ khớp với chuỗi nào?

  • [ ] "Applez"
  • [ ] "Amaz"
  • [ ] "A to z"
  • [ ] Tất cả các phương án trên.

Đáp án: Tất cả. (^ bắt đầu bằng A, .+ bất kỳ ký tự nào ở giữa, $ kết thúc bằng z).

Q3. Hàm nào trả về độ dài của chuỗi (số ký tự)?

  • [ ] length()
  • [ ] str_length() (stringr) hoặc nchar() (base)
  • [ ] dim()
  • [ ] count()

Đáp án: str_length() hoặc nchar(). (length() trả về độ dài vector, không phải độ dài chuỗi trong vector).


Coding Challenge

Challenge: Log Parsing

Bạn có một vector log file: logs <- c("[ERROR] 2024-01-01: System crashed", "[INFO] 2024-01-01: Booted", "[WARN] 2024-01-02: Low memory")

Nhiệm vụ:

  1. Tạo data frame.
  2. Trích xuất cột level (ERROR, INFO, WARN). (Gợi ý: Dùng str_extract với regex).
  3. Trích xuất cột date và convert sang Date object.
r
library(stringr)
library(lubridate)
library(tibble)

logs <- c("[ERROR] 2024-01-01: System crashed", "[INFO] 2024-01-01: Booted", "[WARN] 2024-01-02: Low memory")

df <- tibble(raw = logs) |>
  mutate(
    # Lấy chữ cái in hoa bên trong ngoặc vuông
    level = str_extract(raw, "(?<=\\[)[A-Z]+(?=\\])"),
    
    # Lấy chuỗi ngày tháng (yyyy-mm-dd)
    date_str = str_extract(raw, "\\d{4}-\\d{2}-\\d{2}"),
    date = ymd(date_str)
  )

print(df)