Skip to content

Module 1: Dplyr Core Verbs 🌪️

📝 Stats

  • Số lượng: 10 câu hỏi
  • Độ khó: Sơ cấp -> Trung cấp
  • Mục tiêu: Sử dụng thành thạo Pipe |> và các hàm biến đổi dữ liệu cơ bản.

MCQ

Q1. Hàm nào dùng để giữ lại các dòng (rows) thỏa mãn điều kiện?

  • [ ] select()
  • [ ] filter()
  • [ ] mutate()
  • [ ] slice()

Đáp án: filter(). (slice() cũng chọn dòng nhưng theo index, không phải điều kiện).

Q2. Lệnh df |> select(-id) có tác dụng gì?

  • [ ] Chọn cột tên là -id.
  • [ ] Chọn tất cả các cột TRỪ cột id.
  • [ ] Xóa dòng có id âm.
  • [ ] Lỗi cú pháp.

Đáp án: Chọn tất cả các cột TRỪ cột id.

Q3. Hàm summarize() thường đi kèm với hàm nào để tính toán thống kê theo nhóm?

  • [ ] arrange()
  • [ ] group_by()
  • [ ] order_by()
  • [ ] partition_by()

Đáp án: group_by().

Q4. Kết quả của đoạn code sau là gì (về mặt columns)?

r
df |> mutate(new_col = 1)
  • [ ] Chỉ trả về 1 cột new_col.
  • [ ] Trả về tất cả cột cũ + cột new_col.
  • [ ] Trả về tất cả cột cũ, thay thế cột đầu tiên bằng new_col.
  • [ ] Lỗi.

Đáp án: Trả về tất cả cột cũ + cột new_col. (Nếu muốn chỉ lấy cột mới, dùng transmute).


Coding Challenge

Challenge: Doanh thu theo tháng

Bạn có data frame sales với cột date (YYYY-MM-DD) và revenue (số tiền). Nhiệm vụ:

  1. Lọc lấy các giao dịch có revenue > 0.
  2. Tạo cột month từ date (Gợi ý: dùng lubridate::month).
  3. Tính tổng doanh thu theo từng tháng.
  4. Sắp xếp tháng có doanh thu cao nhất lên đầu.
r
library(dplyr)
library(lubridate)

# Giả lập data
sales <- tibble(
  date = ymd(c("2024-01-01", "2024-01-15", "2024-02-01", "2024-02-20")),
  revenue = c(100, -50, 200, 300)
)

# Code của bạn:
result <- sales |>
  filter(revenue > 0) |>
  mutate(month = month(date)) |>
  group_by(month) |>
  summarize(total_revenue = sum(revenue)) |>
  arrange(desc(total_revenue))

print(result)