Menu
CoddyTech

Các giá trị duy nhất

Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 12 trên 64.

R không có kiểu tập hợp riêng: tập hợp là một vector không có giá trị lặp lại. unique() loại bỏ các giá trị lặp lại và giữ lại lần xuất hiện đầu tiên của mỗi giá trị theo thứ tự ban đầu.

tags <- c("r", "stats", "r", "data", "stats")
print(unique(tags))
print(length(unique(tags)))

Đầu ra:

[1] "r"     "stats" "data" 
[1] 3

duplicated() trả về TRUE cho mọi giá trị đã xuất hiện trước đó trong vector. Lần xuất hiện đầu tiên là FALSE:

ids <- c(7, 3, 7, 9, 3)
print(duplicated(ids))
print(ids[duplicated(ids)])

Đầu ra:

[1] FALSE FALSE  TRUE FALSE  TRUE
[1] 7 3

Cả hai hàm đều so sánh các giá trị chính xác, nên "R" và "r" khác nhau. Hãy chuẩn hóa văn bản trước nếu không cần phân biệt chữ hoa chữ thường:

langs <- c("R", "python", "r", "Python")
print(length(unique(langs)))
print(unique(tolower(langs)))

Đầu ra:

[1] 4
[1] "r"      "python"

unique() cũng hoạt động với số, còn sort(unique(x)) liệt kê các giá trị riêng biệt theo thứ tự tăng dần. sum(duplicated(x)) đếm số phần tử bị lặp lại:

rolls <- c(4, 2, 6, 2, 4, 4)
print(sort(unique(rolls)))
print(sum(duplicated(rolls)))

Đầu ra:

[1] 2 4 6
[1] 3
challenge icon

Thử thách

Dễ

Hoàn thành count_distinct(tags). Trả về số lượng thẻ khác nhau khi không phân biệt chữ hoa chữ thường: R và r được tính là một.

Đoạn code được cung cấp đọc các thẻ từ một dòng, phân tách bằng dấu phẩy, rồi in ra số lượng được trả về.

Tự làm thử

count_distinct <- function(tags) {
  # Viết code của bạn ở đây
  0
}

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
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 Logic và luồng điều khiển

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