Уникальные значения
Часть раздела Логика и потоки выполнения путешествия по 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] 3duplicated() возвращает 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Задание
ЛегкоЗавершите count_distinct(tags). Верните количество различных тегов без учёта регистра: R и r считаются один раз.
Предоставленный код считывает теги как строку, разделённую запятыми, и выводит возвращённое число.
Попробуйте сами
count_distinct <- function(tags) {
# Напишите ваш код здесь
0
}
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(count_distinct(strsplit(input[1], ",")[[1]]), sep = "\n")
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и потоки выполнения
1Строки углублённо
Подстроки с substr()Форматирование с sprintf()Разделение и объединениеПоиск в строкахЗамена текстаПовторение — создание имени пользователя4Матрицы
Создание матрицИндексация матрицСводные данные по строкам и столбцамАрифметика матрицПовторение — схема рассадки7Семейство Apply
lapply и sapplyMap и mapplyFilter и FindReduceПовторение — конвейер обработки данных10Продвинутые конструкции управления
Функция switch()Векторизованный ifelse()repeat и breakРекурсивные функцииПовторение — классификатор оценок2Поиск по ключам и значениям
Поиск в именованных векторахПроверка ключейДобавление и удаление ключейПеребор имёнПовторение — биржа акций5Проект — Журнал оценок
Добавление учениковВыставление оценок3Множества и подсчёт
Уникальные значенияОперации с множествамиПроверка принадлежностиПодсчёт с помощью table()Повторение — гости мероприятия6Функции как значения
Анонимные функцииПередача функцийВозврат функцийЗамыкания с состояниемПовторение — правила скидок9Таблицы данных
Создание таблиц данныхСтолбцы и строкиФильтрация строкДобавление и сортировкаПовторение — отчёт о продажах12Проект — Трекер расходов
Запись расходовОбщие расходыПотренируйтесь самостоятельно: Онлайн-компилятор R