Menu
Coddy logo textTech

Уникальные значения

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 12 из 64.

В R нет отдельного типа для множеств: множество — это вектор без повторяющихся значений. unique() удаляет повторы и сохраняет первое вхождение каждого значения в исходном порядке.

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

Вывод:

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

duplicated() возвращает TRUE для каждого значения, которое уже встречалось ранее в векторе. Первое вхождение имеет значение FALSE:

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

Вывод:

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

Обе функции сравнивают точные значения, поэтому "R" и "r" отличаются. Сначала нормализуйте текст, если регистр не должен иметь значения:

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

Результат:

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

unique() работает и с числами, а sort(unique(x)) выводит различные значения в порядке возрастания. sum(duplicated(x)) подсчитывает, сколько элементов являются повторами:

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

Результат:

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

Задание

Легко

Завершите count_distinct(tags). Верните количество различных тегов без учёта регистра: R и r считаются один раз.

Предоставленный код считывает теги как строку, разделённую запятыми, и выводит возвращённое число.

Попробуйте сами

count_distinct <- function(tags) {
  # Напишите ваш код здесь
  0
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R