Чтение онлайн

на главную - закладки

Жанры

Основы статистической обработки педагогической информации
Шрифт:

Следующий код находит все рейсы, которые вылетели в феврале или марте:

filter(flights, month == 2 | month == 3)

Если попытаться ввести команду буквально

filter(flights, month == (2|3))

то вместо желаемого будут найдены все месяцы равные результату булевой операции 2|3, значение которой обращается в TRUE. В числовом контексте TRUE становится равным единице 1, поэтому будут найдены все январские вылеты, что вовсе не соответствует задуманному.

Полезным клавиатурным сокращением для решения обозначенной проблемы является x %in% y.

Это позволит выбрать каждую строку, где x является одним из значений в y. Можно было бы использовать следующую альтернативу для кода выше:

filter(flights, month %in% c(2, 3))

Иногда можно упростить сложное выражение вспомнив законы де Моргана из курса математической логики: !(x & y) == !х | !y, и !(x | y) == !x & !y. Например, если нужно найти рейсы, которые не задерживались (по прилету или отправлению) более чем на час, можно воспользоваться любым из следующих фильтров:

filter(flights,!(arr_delay > 60 | dep_delay > 60))

filter(flights, arr_delay <= 60, dep_delay <= 60)

Кроме & и |, в R есть && и ||, но не используйте их сейчас, позже узнаете, при каких условиях уместно их применение.

Всякий раз, когда используется сложное составное выражение в filter, предпочтительнее разбить выражение на несколько вспомогательных, это значительно упрощает последующую проверку работы. Вскоре узнаем, как быстро создать новые переменные. Одна важная особенность R, которая может затруднить фильтрацию, это пропущенные значения, или недоступные (NA), которые представляют собой неизвестное значение, поэтому пропущенные значения являются изгоями, практически любая операция с участием NA приведет к NA.

NA > 1

#> [1] NA

2 == NA

#> [1] NA

NA + 3

#> [1] NA

NA / 4

#> [1] NA

Самым алогичным результатом может показаться следующий:

NA == NA

#> [1] NA

Но его легко понять в конкретном контексте: совпадает ли содержимое двух ящиков, внутри которых неизвестно что? Мы не знаем! Если хотите определить, отсутствует ли значение конкретной переменной, можно воспользоваться функцией is.na, в качестве аргумента задав интересующее имя. Функция filter отбирает только те строки, для проверяемые условия обращаются в TRUE, при этом исключаются как значения FALSE, так и NA. Если хотите сохранить пропущенные значения, то запрашивайте их в явном виде:

filter (flights, is.na(month) | month > 1)

Упражнения

1. Найти все рейсы, которые: имели задержку прибытия на два и более часа; прилетели в Хьюстон; управлялись компанией Delta; улетели летом; прибыл с опозданием более чем на два часа; задержались они как минимум на час, но наверстали более 30 минут в полете; отбыли между полуночью и 6 утра (включительно).

2. Функция between из пакета dplyr тоже полезна для фильтрации. А что она делает? Можно ли использовать её для упрощения кода, необходимого для получения ответов в предыдущем задании?

3. Сколько рейсов имеет отсутствующее значение dep_time? Какие еще переменные у них отсутствуют? Что могут представлять собой эти записи в базе данных?

4. Почему значение NA^0 определено, NA / TRUE не определено, а FALSE & NA определено? Можете ли сформулировать общее правило, охватывающее и случай NA * 0?

Функция arrange работает аналогично функции filter, за исключением того, что вместо выбора строк, сортирует их. На вход принимаются данные и набор имен столбцов (или более сложных выражений), чтобы задать отношение порядка по возрастанию. Если укажете более одного имени столбца, то каждый последующий столбец будет сортировать значения строк с равными значениями из предыдущих столбцов:

arrange(flights, year, month, day)

Используя desc можно переданный в аргументе столбец упорядочить по убыванию значений:

arrange(flights, desc(dep_delay))

Пропущенные значения (NA) всегда оказываются в конце сортировки.

Упражнения

1. Как использовать функцию arrange для переноса всех пропущенных значений в начало списка? (Подсказка: применимо is.na).

2. Сортировка рейсов позволяет найти самые задерживаемые рейсы. Найдите рейсы, которые вылетали пунктуальнее всех.

3. Отсортируйте рейсы так, чтобы найти самые скоростные перелёты.

4. Какие рейсы летали дальше всех? Какой маршрут был самым коротким?

Нередко формируемые наборы данных содержат сотни или даже тысячи записей. В таком случае проблематично даже просто найти интересующую переменную. Функция select позволяет быстро сузить поле зрения исследователя, сконцентрировав его на нужных именах переменных. Конечно, select не очень полезна для базы авиаперелётов, так как здесь лишь 19 переменных, но продемонстрируем общую идею:

# поимённый выбор столбцов «месяц», «день»

select(flights, month, day)

# выбор всех столбцов между «месяц» и «день» включительно

select(flights, month:day)

# выбор всех столбцов, кроме тех, что лежат между «месяц» и «день» включительно

select(flights, -(month:day))

Существуют вспомогательные функции, которые уместно вызывать внутри select: функция starts_with("абв") выбирает имена столбцов начинающихся с «абв»; функция ends_with("эюя") выбирает имена столбцов заканчивающиеся на «эюя»; функция contains("клм") выбирает имена содержаие подстроку «клм»; функция matches("(.)\\1") выбирает переменные, имена которых соответствуют заданному регулярному выражению, конкретно в данном случае магическим образом выбираются переменные, содержащие повторяющиеся символы, подробнее о регулярных выражениях в строках расскажем в соответствующей главе; вызов num_range("m", 2:4) соответствует набору m2, m3, m4. Всегда можно заглянуть в ?select для получения более подробной информации.

А еще, select можно использовать для переименования переменных, но это редко когда бывает полезным, так как отбрасывает не упомянутые явно переменные. Вместо этого для переименования используется функция rename, который является вариантом select, но сохраняет все переменные, которые не указаны явно:

rename(flights, год = year)

Другой вариант использования select, совместно со вспомогательной функцией everything, бывает необходим если есть несколько переменных, которые нужно переместить в начало базы данных. Например, месяц (month) и день (day) вылета будут показаны первыми при выводе данных из таблицы, содержащей информацию обо всех авиаперелётах (flights) по команде:

Поделиться:
Популярные книги

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Не кровный Брат

Безрукова Елена
Любовные романы:
эро литература
6.83
рейтинг книги
Не кровный Брат

На границе империй. Том 9. Часть 2

INDIGO
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2

Последний Паладин. Том 2

Саваровский Роман
2. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 2

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Кодекс Охотника. Книга XIII

Винокуров Юрий
13. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
аниме
7.50
рейтинг книги
Кодекс Охотника. Книга XIII

Как я строил магическую империю 2

Зубов Константин
2. Как я строил магическую империю
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю 2

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье

Пустоши

Сай Ярослав
1. Медорфенов
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Пустоши

Последний попаданец 5

Зубов Константин
5. Последний попаданец
Фантастика:
юмористическая фантастика
рпг
5.00
рейтинг книги
Последний попаданец 5

Заставь меня остановиться 2

Юнина Наталья
2. Заставь меня остановиться
Любовные романы:
современные любовные романы
6.29
рейтинг книги
Заставь меня остановиться 2

Курсант: Назад в СССР 7

Дамиров Рафаэль
7. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 7

Эволюция мага

Лисина Александра
2. Гибрид
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эволюция мага

Болотник 3

Панченко Андрей Алексеевич
3. Болотник
Фантастика:
попаданцы
альтернативная история
6.25
рейтинг книги
Болотник 3