Toán tử %in%
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 70 trên 78.
Đôi khi bạn cần kiểm tra xem các giá trị có tồn tại trong một vector hay không. Toán tử %in% cung cấp một cách đơn giản để kiểm tra phần tử có thuộc vector hay không, trả về TRUE cho mỗi phần tử khớp và FALSE trong các trường hợp còn lại.
Cú pháp cơ bản kiểm tra xem các giá trị ở bên trái có tồn tại trong vector ở bên phải hay không:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Đầu ra:
[1] TRUEBạn cũng có thể kiểm tra nhiều giá trị cùng lúc. Toán tử trả về một véc-tơ logic, với một kết quả cho mỗi giá trị được kiểm tra:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Đầu ra:
[1] TRUE FALSE TRUEĐiều này khiến %in% rất phù hợp để lọc. Kết hợp với lập chỉ mục logic, bạn có thể trích xuất các phần tử thuộc một tập hợp cụ thể:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Đầu ra:
[1] 1 3 2Toán tử %in% đặc biệt hữu ích khi xác thực đầu vào của người dùng hoặc lọc dữ liệu dựa trên danh sách giá trị được chấp nhận đã xác định trước.
Thử thách
DễBạn sẽ nhận ba dòng đầu vào:
- Danh sách các mặt hàng trong kho của bạn, phân tách bằng dấu phẩy (ví dụ:
apple,banana,milk,bread,eggs,cheese) - Danh sách các mặt hàng trong danh sách mua sắm của bạn, phân tách bằng dấu phẩy (ví dụ:
milk,butter,eggs,juice) - Danh sách các mặt hàng đang giảm giá, phân tách bằng dấu phẩy (ví dụ:
bread,juice,yogurt)
Dùng toán tử %in%:
- Tạo các vector ký tự từ mỗi dòng đầu vào được phân tách bằng dấu phẩy
- Kiểm tra những mặt hàng nào trong danh sách mua sắm đã có trong kho của bạn và in ra kết quả dạng vector logic
- Lọc và in ra những mặt hàng trong danh sách mua sắm mà bạn CHƯA có trong kho (những mặt hàng bạn cần mua)
- Lọc và in ra những mặt hàng bạn cần mua đang giảm giá
Ví dụ, nếu đầu vào là:
apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butterĐầu ra sẽ là:
[1] TRUE FALSE TRUE FALSE TRUE
[1] "butter" "juice"
[1] "butter" "juice"Giải thích:
- Danh sách mua sắm được kiểm tra với kho: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
- Các mặt hàng KHÔNG có trong kho (cần mua): butter, juice
- Các mặt hàng cần mua đang giảm giá: butter và juice đều có trong danh sách giảm giá
Dùng toán tử ! cùng với %in% để tìm những mặt hàng KHÔNG có trong một vector.
Tự làm thử
# Đọc đầu vào
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: Viết code bên dưới
# 1. Dùng strsplit() tạo các vectơ ký tự từ từng đầu vào được phân tách bằng dấu phẩy
# 2. Kiểm tra mặt hàng nào trong danh sách mua sắm đã có trong kho (dùng %in%)
# 3. Lọc các mặt hàng trong danh sách mua sắm chưa có trong kho (dùng ! với %in%)
# 4. Lọc các mặt hàng bạn cần mua và đang giảm giá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
4Toán tử phần 2
Toán tử logic (AND, OR)Toán tử logic phần 2 (NOT)Ôn tập: logic đơn giảnLogic vector hóa phần 1Logic vector hóa phần 27Máy tính chia hóa đơn
Thông báo chào mừngNhận đầu vào từ người dùng13Vectơ nâng cao
Cắt lát và đánh chỉ số vectơĐánh chỉ số logicPhép toán số học và tái chế vectơToán tử %in%2Biến và kiểu dữ liệu
Kiểu dữ liệu sốKiểu dữ liệu số nguyênKiểu dữ liệu ký tựKiểu dữ liệu logicKiểm tra kiểu dữ liệuQuy tắc đặt tênGiá trị thiếu: NATóm tắt: tạo biến8Vòng lặp
Vòng lặp forVòng lặp whileBreakNext (continue)Ôn tập: giai thừaTạo dãy (seq, :)Vòng lặp lồng nhauÔn tập: đầu vào động3Toán tử phần 1
Toán tử số họcPhép chia lấy phần nguyên và phép moduloToán tử gánÔn tập: phép tính đơn giảnToán tử so sánh6Nhập xuất cơ bản
In đầu raDùng cat để in đầu raĐầu ra với biếnĐọc đầu vào bằng readline()Cơ bản về chuyển đổi kiểuÔn tập: máy tính tuổiÔn tập: đúng hay sai9Hàm
Khai báo hàmĐối số hàmGiá trị trả vềÔn tập: hàm SigmaÔn tập: hàm xác thựcGiá trị tham số mặc địnhTự luyện tập: Trình biên dịch R online