---
title: "Домашнее задание №3"
subtitle: "ФББ - R - 2026"
output: html_document
---



![](assets/fish/03_monodon_r_hex.png){width=10% fig-align="center"}

***

На занятии мы познакомились и установили коллекцию пакетов Tidyverse.

Работу с data.frame вы уже изучили, так что осталось немножко посмотреть на синтаксис Tidyverse - будем работать с пакетом ``dplyr``. Можете искать информацию, например, через Help в RStudio или [тут](https://dplyr.tidyverse.org/reference/index.html).

Все задания решайте с помощью средств пакета ``dplyr``, если не указано обратное. 

В некоторых заданиях логично было бы вывести сначала объект (или его часть) ДО манипуляций, а затем ПОСЛЕ, чтобы продемонстрировать, что манипуляция совершена и совершена верна

***

### Задание №1

Давайте вспомним, как устанавливаются пакеты. 

Установие пакет *openintro* из репозитория CRAN. 

Воспользуйтесь набором данных **nycflights** из пакета *openintro*.

Примените к данным *nycflights* функцию ``glimpse()``. 

С помощью ``glimpse()`` можно получить сводку о данных, аналог ``str()``. 

Выведите результат полностью. 

```{r}

```

### Задание №2 

Есть ли в данных *nycflights* пропущенные значения? 

Используя функции базового R выведите сумму пропущенных значений в наборе данных. 

```{r}

```

### Задания №3

Для фильтрации строк по условию используйте функцию ``filter()``. 

~~Будет в самостоятельной работе~~

Отберите из набора данных *nycflights* июньские (столбец month) рейсы, которые вылетели (столбец origin) из аэропорта JFK и прилетели (столбец dest) в аэропорты LAX или ROC. Выполните фильтрацию за одну команду. Покажите, что вы точно отобрали только нужные аэропорты.

Сколько рейсов подходят под условия? 

```{r}

```

### Задание №4

Для выбора колонок по индексу и имени используйте функцию ``select()``

Давайте начнем с индексов. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №3. 

Отберите наиболее оптимальным способом первую, вторую, третью, одиннадцатую и двенадцатую колонки. 

Не забывайте демонтрировать корректность решения!!

```{r}

```

### Задание №5

Теперь отберем колонки по имени. 

~~Будет в самостоятельной работе~~

Воспользуйтесь подвыборкой рейсов, полученных в задании №3. 

Удалите колонку с аэропортами, куда прилетали рейсы. 

```{r}

```

### Задание №6

Не всегда можно и нужно перечислять в явном виде индексы или имена колонок для фильтрации. 

Оставлять или удалять колонки можно на основании общих аттрибутов в их названиях.

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.  

Оставьте только колонки, иена которых начинаются с буквы ``d``. Примените связку ``select()`` + ``starts_with()``

```{r}

```

### Задание №7

Необходимый паттерн в названии колонки не обязательно находится в начале названий. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №3.  

Оставьте только такие колонки, которые в названии содержат "_" в любом месте. Примените связку ``select()`` + ``contains()``

```{r}

```

### Задание №8

Отбирать строки по позициям можно с помощью функции ``slice()``

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Отберите первую, пятую и десятую строки.

```{r}

```

### Задание №9

Для вывода "шапки" набора данных можно использовать, например, функцию ``slice_head()``, аналог функции ``head()`` из базового R.

Отберите первые 8 строк из полного набора данных *nycflights*.

```{r}

```

### Задание №10

Очень полезно уметь отбирать случайным образом строки из набора данных. 

Функция ``slice_sample()`` помогает это сделать разными способоами. 

Выберите случайным образом 10 строк из полного набора данных *nycflights*.

Помните, что задания с случайным выбором должны быть воспроизводимы.

```{r}

```

### Задание №11

Отберите случайным образом 10% строк из набора данных *nycflights*. 

Для выполнения задания исследуйте параметры функции ``slice_sample()``.

```{r}

```

### Задание №12

Обратите внимание на параметр ``weight_by`` функции ``slice_sample()``.

Для чего он нужен? Продемонстрируйте его работу на любом примере.

```{r}

```

### Задание №13

Воспользуйтесь подвыборкой рейсов, полученных в задании №3.

Выберите столбец tailnum двумя способами: с помощью функций ``pull()`` и ``select()``.

В чем разница? 

```{r}

```

### Задание №14

С помощью функции ``arrange()`` можно отсортировать данные по одному или нескольким столбцам по убыванию ли возрастанию. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Отсортируйте набор данных по столбцу day по убыванию. 

```{r}

```

### Задание №15

Добавить новый столбец к набору данных можно с помощью функции ``mutate()``.

Новый столбец может быть результатом различных манипуляций, проведенных с уже существующими столбцами. 

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Добавьте к данным столбец YMD, который представляет собой слияние столбцов year, month, day вида: year_month_day (пример: 2023_9_18).

```{r}

```

### Задание №16

С помощью функции ``transmute()`` можно создать новые колонки, удалив при этом все колонки, которые были раньше. 

Воспользуйтесь исходными данными *nycflights*.

Создайте и оставьте только колонки: 

- YMD: аналогичная описанной в задании №15

- dep_delay_abs: абсолютные значения колонки dep_delay  

- arr_delay_abs: абсолютные значения колонки arr_delay

```{r}

```

### Задание №17

Переименовать колонки можно с помощью функции ``rename()``.

Воспользуйтесь исходными данными *nycflights*.

Переименуйте колонку dep_delay в Departure_delays_min.

```{r}

```

### Задание №18

Переименовать колонки можно, применив к названиям какую-то единообразную операцию. 

Это можно сделать с помощью функции ``rename_with()``.

Воспользуйтесь подвыборкой рейсов, полученных в задании №4.

Сделайте все буквы в названиях всех колонок заглавными. 

```{r}

```

### Задание №19

Оставить только уникальные строки в наборе данных или в конкретном столбце можно с помощью функции ``distinct()``.

Воспользуйтесь исходными данными *nycflights*.

Выведите только уникальные значения столбца dest.

```{r}

```

### Задание №20

``n()`` - выводит число записей. 

Отберите последние 10 строк из набора данных *nycflights*, используя функцию ``n()``.

```{r}

```

### Задание №21

Воспользуйтесь полным набором данных *nycflights*.

С помощью средств базовой графики визуализируйте количество рейсов в каждом месяце. 

Подпишите оси и название графика.

```{r}

```

### Задание №22

Воспользуйтесь полным набором данных *nycflights*.

С помощью средств базовой графики визуализируйте распределение времени задержки прибытия рейса (столбец arr_delay). 

Подпишите оси и название графика.

```{r}

```

### Задание №23

Воспользуйтесь полным набором данных *nycflights*.

С помощью средств базовой графики изобразите точковую диаграму времени задержки отправления от задержки прибытия рейсов. Добавьте окрашивание по месяцам. 

Подпишите оси и название графика.

```{r}

```

### Задание №24

Решите задание №3 с помощью базового R.

```{r}

```

### Задание №25

Решите задание №15 с помощью базового R.

```{r}

```

***

~~на самостоятельной работе будет задание на фильтрацию таблицы по строкам и столбцам средствами tidyverse, а еще помним про логику использования графиков и немножко циклы, но я вам снова ничего не говорила~~

