Логическая индексация
Часть раздела Основы путешествия по R на Coddy — урок 68 из 78.
Вместо указания точных позиций вы можете использовать логический вектор для выбора элементов. Этот метод, называемый логической индексацией, позволяет фильтровать вектор на основе условий, а не позиций.
Когда вы применяете сравнение к вектору, R возвращает логический вектор той же длины:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)Вывод:
[1] FALSE FALSE TRUE TRUE TRUEВы можете использовать этот логический вектор непосредственно внутри квадратных скобок для извлечения соответствующих элементов:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])Вывод:
[1] 30 40 50R сохраняет только те элементы, для которых логический вектор имеет значение TRUE. Этот подход гораздо чище, чем написание циклов для фильтрации данных. Вы можете комбинировать условия, используя логические операторы:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])Вывод:
[1] 20 30 40Логическая индексация — это одна из самых мощных возможностей R для манипулирования данными, позволяющая фильтровать наборы данных с помощью простых и понятных выражений.
Задание
ЛегкоВы получите две строки входных данных:
- Список чисел, разделенных запятыми (например,
15,42,8,67,23,91,34,12,56) - Два пороговых значения, разделенных запятой, представляющих диапазон (например,
20,60)
Используя логическую индексацию:
- Создайте числовой вектор из чисел, разделенных запятыми
- Извлеките и выведите все элементы, которые меньше первого порога (нижней границы)
- Извлеките и выведите все элементы, которые больше второго порога (верхней границы)
- Извлеките и выведите все элементы, которые находятся в диапазоне (больше или равны первому порогу И меньше или равны второму порогу)
Например, если входные данные следующие:
5,25,10,45,60,15,80,35,50
20,50Вывод должен быть таким:
[1] 5 10 15
[1] 60 80
[1] 25 45 35 50Объяснение:
- Элементы меньше 20: 5, 10, 15
- Элементы больше 50: 60, 80
- Элементы между 20 и 50 (включительно): 25, 45, 35, 50
Используйте оператор & для объединения условий при фильтрации диапазона.
Шпаргалка
Логическая индексация позволяет фильтровать вектор на основе условий, а не позиций. Когда вы применяете сравнение к вектору, R возвращает логический вектор:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# Вывод: [1] FALSE FALSE TRUE TRUE TRUEИспользуйте логический вектор внутри квадратных скобок для извлечения соответствующих элементов:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# Вывод: [1] 30 40 50Комбинируйте условия с помощью логических операторов, таких как & (И):
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Вывод: [1] 20 30 40Попробуйте сами
# Чтение входных данных
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Преобразование чисел, разделенных запятыми, в числовой вектор
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# Преобразование пороговых значений
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]
# TODO: Напишите свой код ниже
# 1. Используйте логическую индексацию для извлечения элементов меньше lower_bound и выведите их
# 2. Используйте логическую индексацию для извлечения элементов больше upper_bound и выведите их
# 3. Используйте логическую индексацию с оператором & для извлечения элементов в диапазоне (включительно) и выведите ихВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строками