Tìm hiểu chi tiết cách sử dụng hàm sub() và gsub() trong ngôn ngữ R để tìm kiếm, thay thế chuỗi và làm sạch dữ liệu hiệu quả bằng Regex.
Trong ngôn ngữ lập trình R, xử lý và làm sạch chuỗi dữ liệu là một bước quan trọng trước khi phân tích. Hai hàm phổ biến và mạnh mẽ nhất hỗ trợ tác vụ này là sub() và gsub(). Cả hai hàm đều được sử dụng để tìm kiếm mô hình (pattern) và thay thế bằng chuỗi mới, nhưng có sự khác biệt rõ rệt về phạm vi áp dụng.
Bài viết này sẽ hướng dẫn chi tiết cách sử dụng sub() và gsub() kèm theo các ví dụ minh họa thực tế.
Cú pháp cơ bản của sub() và gsub()
Cả hai hàm sub() và gsub() đều có cú pháp và danh sách tham số tương tự nhau:
sub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)
gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)
Trong đó các tham số quan trọng bao gồm:
- pattern: Chuỗi hoặc biểu thức chính quy (Regex) cần tìm kiếm.
- replacement: Chuỗi dùng để thay thế cho mô hình đã tìm thấy.
- x: Vector chuỗi đầu vào cần xử lý.
- ignore.case: Nếu đặt là
TRUE, hàm sẽ không phân biệt chữ hoa và chữ thường. - fixed: Nếu đặt là
TRUE,patternsẽ được hiểu là chuỗi ký tự cố định thay vì biểu thức chính quy.
Sự khác biệt giữa sub() và gsub()
Thứ làm nên sự khác biệt cốt lõi giữa hai hàm này nằm ở số lần thay thế:
sub(): Chỉ thay thế lần xuất hiện đầu tiên của mô hình trong mỗi phần tử của vector chuỗi.gsub(): Thay thế tất cả các lần xuất hiện (Global Substitution) của mô hình trong mỗi phần tử.
Các ví dụ ứng dụng thực tế
1. So sánh trực quan giữa sub() và gsub()
Hãy xem xét ví dụ dưới đây khi muốn thay thế ký tự "a" bằng "X":
text <- c("banana", "apple", "papaya")
# Sử dụng sub(): Chỉ thay thế ký tự 'a' đầu tiên xuất hiện
result_sub <- sub("a", "X", text)
print(result_sub)
# Kết quả: "bXnana" "Xpple" "pXpaya"
# Sử dụng gsub(): Thay thế toàn bộ ký tự 'a' tìm thấy
result_gsub <- gsub("a", "X", text)
print(result_gsub)
# Kết quả: "bXnXnX" "Xpple" "pXpXYX"
2. Bỏ qua phân biệt chữ hoa và chữ thường
Khi xử lý dữ liệu thô nhập từ người dùng, việc chữ hoa/chữ thường không đồng nhất rất phổ biến. Bạn có thể dùng ignore.case = TRUE:
text <- "R is Amazing, r is powerful"
# Thay thế cả 'R' và 'r' thành 'Python'
result <- gsub("r", "Python", text, ignore.case = TRUE)
print(result)
# Kết quả: "Python is Amazing, Python is powerful"
3. Làm sạch dữ liệu với Biểu thức chính quy (Regex)
Ứng dụng phổ biến nhất của gsub() là loại bỏ các ký tự không mong muốn khỏi tập dữ liệu.
Loại bỏ các chữ số:
data <- c("User123", "Item456", "Code789")
clean_data <- gsub("[0-9]", "", data)
print(clean_data)
# Kết quả: "User" "Item" "Code"
Xóa khoảng trắng thừa ở đầu và cuối chuỗi:
dirty_text <- " Dữ liệu cần làm sạch "
clean_text <- gsub("^\\s+|\\s+$", "", dirty_text)
print(clean_text)
# Kết quả: "Dữ liệu cần làm sạch"
Tóm lược
Hàm sub() và gsub() là những công cụ cơ bản nhưng cực kỳ mạnh mẽ khi xử lý dữ liệu dạng văn bản trong R. Hãy dùng sub() khi bạn chỉ muốn chỉnh sửa lần xuất hiện đầu tiên, và dùng gsub() khi cần chuẩn hóa toàn bộ dữ liệu. Kết hợp linh hoạt hai hàm này với Regex sẽ giúp quy trình tiền xử lý dữ liệu của bạn chính xác và tiết kiệm thời gian hơn.
Ngày phát hành: 10/06/2026
Nguồn: www.digitalocean.com