Фильтрация строк
Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 44 из 64.
Логический вектор с одним значением для каждой строки выбирает строки, где это значение равно TRUE. Поместите его перед запятой, а часть для столбцов оставьте пустой, чтобы сохранить все столбцы:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30, ])
print(nrow(people[people$age > 30, ]))Результат:
name age city
1 ada 36 london
3 cy 41 rome
[1] 2Объединяйте условия с помощью & (оба) и | (одно из двух). Каждая часть сравнивает целый столбец, поэтому результат по-прежнему содержит по одному значению на строку:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
print(people[people$age > 30 & people$city == "london", ])
print(people$name[people$age < 25 | people$city == "rome"])Результат:
name age city
1 ada 36 london
[1] "bo" "cy"subset(df, condition) выполняет то же самое с более коротким кодом, поскольку внутри него имена столбцов можно использовать напрямую:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
older <- subset(people, age > 30)
print(older$name)Вывод:
[1] "ada" "cy" Если ни одна строка не соответствует условию, результатом будет дата-фрейм с 0 строками, поэтому проверьте nrow(), прежде чем считывать из него данные:
people <- data.frame(
name = c("ada", "bo", "cy"),
age = c(36, 22, 41),
city = c("london", "paris", "rome")
)
nobody <- people[people$age > 90, ]
print(nrow(nobody))
print(if (nrow(nobody) == 0) "none" else nobody$name[1])Результат:
[1] 0
[1] "none"Задание
ЛегкоЗавершите adults_in(df, city). В df есть столбцы name, age и city. Верните имена людей, которым не менее 18 лет и которые живут в city, в порядке строк, объединив их с помощью , , или верните none.
Предоставленный код считывает таблицу из входных данных с помощью read.csv(text = input): первая строка содержит имена столбцов, а каждая последующая строка представляет собой одну строку таблицы со значениями, разделёнными запятыми. Последняя строка входных данных содержит город, а код выводит возвращённое значение.
Попробуйте сами
adults_in <- function(df, city) {
# Напишите свой код здесь
"none"
}
# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
df <- read.csv(text = input[-length(input)])
cat(adults_in(df, input[length(input)]), 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