Giao diện
Module 5: Data.Table Basics ⚡
📝 Stats
- Số lượng: 8 câu hỏi
- Độ khó: Nâng cao (Cú pháp lạ)
- Mục tiêu: Hiểu cơ chế Reference (Mutable) và Binary Search.
MCQ
Q1. Cú pháp cơ bản của data.table là gì?
- [ ]
DT[i, j, by] - [ ]
DT[row, col] - [ ]
DT |> filter |> select - [ ]
DT(i, j)
Đáp án:
DT[i, j, by].
Q2. Toán tử := có ý nghĩa gì?
- [ ] Gán giá trị, tạo bản copy mới.
- [ ] Update cột tại chỗ (in-place modification), không copy bộ nhớ.
- [ ] So sánh bằng.
- [ ] Định nghĩa hàm.
Đáp án: Update cột tại chỗ.
Q3. Tại sao setkey(DT, col) giúp việc filter nhanh hơn?
- [ ] Nó tạo index hash map.
- [ ] Nó sắp xếp lại dữ liệu (physically reorder) để dùng Binary Search.
- [ ] Nó nén dữ liệu lại.
- [ ] Nó cache dữ liệu lên RAM.
Đáp án: Nó sắp xếp lại dữ liệu để dùng Binary Search.
Coding Challenge
Challenge: Aggegration Race
Cho DT chứa 10 triệu dòng. Cột grp là nhóm (A, B, C...). Cột val là giá trị. Viết lệnh data.table để tính tổng val theo grp, chỉ lấy các nhóm có tổng > 1000.
r
library(data.table)
# Giả lập (nhỏ thôi cho visual)
DT <- data.table(grp = c("A", "A", "B", "C"), val = c(10, 20, 5, 2))
# Code dplyr tương đương:
# DT |> group_by(grp) |> summarize(sum_val = sum(val)) |> filter(sum_val > 1000)
# Code data.table (Siêu tốc):
# 1. Tính tổng theo group
res <- DT[, .(sum_val = sum(val)), by = grp]
# 2. Filter kết quả (Chaining)
res[sum_val > 1000]
# Hoặc viết gộp 1 dòng (Having clause style)
DT[, .(sum_val = sum(val)), by = grp][sum_val > 1000]