Menu
CoddyTech

Đánh chỉ số logic

Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 68 trên 78.

Thay vì chỉ định vị trí chính xác, bạn có thể dùng một vectơ logic để chọn các phần tử. Kỹ thuật này, gọi là lập chỉ mục logic (logical indexing), cho phép bạn lọc một vectơ dựa trên các điều kiện thay vì vị trí.

Khi áp dụng phép so sánh cho một vector, R trả về một vector logic có cùng độ dài:

numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)

Đầu ra:

[1] FALSE FALSE  TRUE  TRUE  TRUE

Bạn có thể dùng trực tiếp véc-tơ logic này bên trong dấu ngoặc vuông để trích xuất các phần tử khớp:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])

Đầu ra:

[1] 30 40 50

R chỉ giữ lại các phần tử mà véc-tơ logic có giá trị TRUE. Cách này gọn gàng hơn nhiều so với việc viết vòng lặp để lọc dữ liệu. Bạn có thể kết hợp các điều kiện bằng cách dùng toán tử logic:

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])

Đầu ra:

[1] 20 30 40

Đánh chỉ mục logic là một trong những tính năng mạnh mẽ nhất của R để thao tác dữ liệu, cho phép bạn lọc các tập dữ liệu bằng những biểu thức đơn giản, dễ đọc.

challenge icon

Thử thách

Dễ

Bạn sẽ nhận được hai dòng đầu vào:

  1. Một danh sách số được phân tách bằng dấu phẩy (ví dụ: 15,42,8,67,23,91,34,12,56)
  2. Hai giá trị ngưỡng được phân tách bằng dấu phẩy, biểu thị một khoảng (ví dụ: 20,60)

Dùng cách lập chỉ mục logic:

  1. Tạo một vector số từ các số được phân tách bằng dấu phẩy
  2. Trích xuất và in ra tất cả phần tử nhỏ hơn ngưỡng thứ nhất (cận dưới)
  3. Trích xuất và in ra tất cả phần tử lớn hơn ngưỡng thứ hai (cận trên)
  4. Trích xuất và in ra tất cả phần tử nằm trong khoảng (lớn hơn hoặc bằng ngưỡng thứ nhất VÀ nhỏ hơn hoặc bằng ngưỡng thứ hai)

Ví dụ, nếu đầu vào là:

5,25,10,45,60,15,80,35,50
20,50

Đầu ra sẽ là:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

Giải thích:

  • Các phần tử nhỏ hơn 20: 5, 10, 15
  • Các phần tử lớn hơn 50: 60, 80
  • Các phần tử nằm trong khoảng từ 20 đến 50 (bao gồm cả hai cận): 25, 45, 35, 50

Dùng toán tử & để kết hợp các điều kiện lọc khoảng.

Tự làm thử

# Đọc dữ liệu đầu vào
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)

# Phân tích các số phân tách bằng dấu phẩy thành một vectơ số
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))

# Phân tích các giá trị ngưỡng
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]

# TODO: Viết code bên dưới
# 1. Dùng chỉ số logic để lấy các phần tử nhỏ hơn lower_bound rồi in ra
# 2. Dùng chỉ số logic để lấy các phần tử lớn hơn upper_bound rồi in ra
# 3. Dùng chỉ số logic với toán tử & để lấy các phần tử trong khoảng, bao gồm cả hai đầu mút, rồi in ra
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 độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch R online