---
title: "Домашнее задание №2"
subtitle: "ФББ - R - 2023"
output: html_document
---

**Дедлайн - 28 сентября 2023 23:59**

![](assets/fish/02_clownfish_r_hex.png){width=10% fig-align="center"}

***

На занятии мы кратко познакомились и установили коллекцию пакетов Tidyverse.

Работу с data.frame вы уже изучили, так что осталось немножко посмотреть на синтаксис Tidyverse - будем работать с пакетом ``dplyr``. Можете искать информацию, например, через Help в RStudio или [тут](https://dplyr.tidyverse.org/reference/index.html).

Все задания решайте с помощью средств пакета ``dplyr``, если не указано обратное. 

Обратите особое внимание на оформление домашнего задания и правила, озвученные на занятии. 

Ориентируйтесь на файл с примером *test.Rmd*

При решении заданий приводите весь код, который вам понадобился для получения ответа. 

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

Решение каждого задания должно позволять проверить корректность манипуляций без дополнительных действий со стороны преподавателя. Пример: в задании просят создать вектор; после выполнения соответствующей команды выведите получившейся вектор (или его начало, если вектор длинный) в явном виде, чтобы продемонстрировать результат. Обратите внимание на функции *head()* и *tail()*

НЕ НУЖНО в отчете выводить полностью длинные вектора, матрицы и пр. Это будет штрафоваться

В некоторых заданиях логично было бы вывести сначала объект (или его часть) ДО манипуляций, а затем ПОСЛЕ, чтобы продемонстрировать, что манипуляция совершена и совершена верна

На основании заполненного .Rmd файла создайте .html файл

Присылать заполненные .Rmd тетрадки и .html файл необходимо через [гугл-форму](https://forms.gle/DHMSNKAYLqXMr3pi6)

***

### Задание №1

Воспользуйтесь набором данных **nycflights** из пакета *openintro*.

Примените к данным *nycflights* функцию ``glimpse()``. 

С помощью ``glimpse()`` можно получить сводку о данных, аналог ``str()``. 

Выведите результат полностью. 

### Задание №2 

Есть ли в данных *nycflights* пропущенные значения? 

Используя функции базового R выведите сумму пропущенных значений в наборе данных. 

### Задания №3

Для фильтрации строк по условию используйте функцию ``filter()``. 

~~Будет в самостоятельной работе~~

Отберите из набора данных *nycflights* июньские (столбец month) рейсы, которые вылетели (столбец origin) из аэропорта JFK и прилетели (столбец dest) в аэропорты LAX или ROC. Выполните фильтрацию за одну команду. Покажите, что вы точно отобрали только нужные аэропорты.

Сколько рейсов подходят под условия? 

### Задание №4

Для выбора колонок по индексу и имени используйте функцию ``select()``

Давайте начнем с индексов. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №3. 

Отберите наиболее оптимальным способом первую, вторую, третью, одиннадцатую и двенадцатую колонки. 

Не забывайте демонтрировать корректность решения!!

### Задание №5

Теперь отберем колонки по имени. 

~~Будет в самостоятельной работе~~

Воспользуйтесь подвыборкой рейсов, полученных в задании №3. 

Удалите колонку с аэропортами, куда прилетали рейсы. 

### Задание №6

Не всегда можно и нужно перечислять в явном виде индексы или имена колонок для фильтрации. 

Оставлять или удалять колонки можно на основании общих аттрибутов в их названиях.

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.  

Оставьте только колонки, иена которых начинаются с буквы ``d``. Примените связку ``select()`` + ``starts_with()``

### Задание №7

Необходимый паттерн в названии колонки не обязательно находится в начале названий. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №3.  

Оставьте только такие колонки, которые в названии содержат "_" в любом месте. Примените связку ``select()`` + ``contains()``

### Задание №8

Отбирать строки по позициям можно с помощью функции ``slice()``

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Отберите первую, пятую и десятую строки.

### Задание №9

Для вывода шапки набора данных можно использовать, например, функцию ``slice_head()``, аналог функции ``head()`` из базового R.

Отберите первые 8 строк из полного набора данных *nycflights*.

### Задание №10

Очень полезно уметь отбирать случайным образом строки из набора данных. 

Функция ``slice_sample()`` помогает это сделать разными способоами. 

Выберите случайным образом 10 строк из полного набора данных *nycflights*.

Помните, что задания с случайным выбором должны быть воспроизводимы.

### Задание №11

Отберите случайным образом 10% строк из набора данных *nycflights*. 

Для выполнения задания исследуйте параметры функции ``slice_sample()``.

### Задание №12

Обратите внимание на параметр ``weight_by`` функции ``slice_sample()``.

Для чего он нужен? Продемонстрируйте его работу на любом примере.

### Задание №13

Воспользуйтесь подвыборкой рейсов, полученных в задании №3.

Выберите столбец tailnum двумя способами: с помощью функций ``pull()`` и ``select()``.

В чем разница? 

### Задание №14

С помощью функции ``arrange()`` можно отсортировать данные по одному или нескольким столбцам по убыванию ли возрастанию. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Отсортируйте набор данных по столбцу day по убыванию. 

### Задание №15

Добавить новый столбец к набору данных можно с помощью функции ``mutate()``.

Новый столбец может быть результатом различных манипуляций, проведенных с уже существующими столбцами. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Добавьте к данным столбец YMD, который представляет собой слияние столбцов year, month, day вида: year_month_day (пример: 2023_9_18).

### Задание №16

С помощью функции ``transmute()`` можно создать новые колонки, удалив при этом все колонки, которые были раньше. 

Воспользуйтесь исходными данными *nycflights*.

Создайте и оставьте только колонки: 

- YMD: аналогичная описанной в задании №15

- dep_delay_abs: абсолютные значения колонки dep_delay  

- arr_delay_abs: абсолютные значения колонки arr_delay

### Задание №17

Переименовать колонки можно с помощью функции ``rename()``.

Воспользуйтесь исходными данными *nycflights*.

Переименуйте колонку dep_delay в Departure_delays_min.

### Задание №18

Переименовать колонки можно, применив к названиям какую-то единообразную операцию. 

Это можно сделать с помощью функции ``rename_with()``.

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Сделайте все буквы в названиях всех колонок заглавными. 

### Задание №19

Оставить только уникальные строки в наборе данных или в конкретном столбце можно с помощью функции ``distinct()``.

Воспользуйтесь исходными данными *nycflights*.

Выведите только уникальные значения столбца dest.

### Задание №20

``n()`` - выводит число записей. 

Отберите последние 10 строк из набора данных *nycflights*, используя функцию ``n()``.

### Задание №21

Воспользуйтесь полным набором данных *nycflights*.

С помощью средств базовой графики визуализируйте количество рейсов в каждом месяце. 

Подпишите оси и название графика.

### Задание №22

Воспользуйтесь полным набором данных *nycflights*.

С помощью средств базовой графики визуализируйте распределение времени задержки прибытия рейса (столбец arr_delay). 

Подпишите оси и название графика.

### Задание №23

Воспользуйтесь полным набором данных *nycflights*.

С помощью средств базовой графики изобразите точковую диаграму времени задержки отправления от задержки прибытия рейсов. Добавьте окрашивание по месяцам. 

Подпишите оси и название графика.

### Задание №24

Решите задание №3 с помощью базового R.

### Задание №25

Решите задание №15 с помощью базового R.

***

~~на самостоятельной работе будет задание на фильтрацию таблицы по строкам и столбцам средствами tidyverse, но я вам снова ничего не говорила~~

