options(repos = "https://cloud.r-project.org")
install.packages(c("nycflights13", "tidyverse"))
## Устанавливаю пакеты в 'C:/Users/Admin/AppData/Local/R/win-library/4.4'
## (потому что 'lib' не определено)
## пакет 'nycflights13' успешно распакован, MD5-суммы проверены
## пакет 'tidyverse' успешно распакован, MD5-суммы проверены
## 
## Скачанные бинарные пакеты находятся в
##  C:\Users\Admin\AppData\Local\Temp\RtmpsBiugn\downloaded_packages
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.4     ✔ tidyr     1.3.1
## ✔ purrr     1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(nycflights13)
library(palmerpenguins)

1. Для каждого направления (dest) по набору flights посчитайте общее пройденное расстояние, используя функцию sum().

dest_distance <- flights %>%
  group_by(dest) %>%
  summarise(total_distance = sum(distance, na.rm = TRUE)) %>%
  arrange(desc(total_distance))
print(dest_distance)
## # A tibble: 105 × 2
##    dest  total_distance
##    <chr>          <dbl>
##  1 LAX         39927498
##  2 SFO         34366299
##  3 LAS         13439046
##  4 MCO         13280883
##  5 ATL         13033618
##  6 FLL         12899679
##  7 MIA         12801727
##  8 ORD         12599321
##  9 DFW         12085030
## 10 DEN         11732253
## # ℹ 95 more rows

2. Перекодируйте переменную month таким образом, чтобы вместо цифр были названия месяцев.

flights_month <- flights %>%
mutate(month_name = factor(month, 
levels = 1:12,
labels = month.name))
print(flights_month)
## # A tibble: 336,776 × 20
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ℹ 336,766 more rows
## # ℹ 12 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>, month_name <fct>

3. На основе переменной air_time, показывающей время в полете в минутах, создайте переменную air_time_hours, в которой время переведено в часы.

flights_time <- flights %>%
mutate(air_time_hours = air_time / 60)
print(flights_time)
## # A tibble: 336,776 × 20
##     year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
##    <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
##  1  2013     1     1      517            515         2      830            819
##  2  2013     1     1      533            529         4      850            830
##  3  2013     1     1      542            540         2      923            850
##  4  2013     1     1      544            545        -1     1004           1022
##  5  2013     1     1      554            600        -6      812            837
##  6  2013     1     1      554            558        -4      740            728
##  7  2013     1     1      555            600        -5      913            854
##  8  2013     1     1      557            600        -3      709            723
##  9  2013     1     1      557            600        -3      838            846
## 10  2013     1     1      558            600        -2      753            745
## # ℹ 336,766 more rows
## # ℹ 12 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
## #   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
## #   hour <dbl>, minute <dbl>, time_hour <dttm>, air_time_hours <dbl>

4. Набор данных о пингвинах penguins из библиотеки palmerpenguins сгруппируйте по видам и полу пингвинов (species, sex) и посчитайте средний размер клюва в мм (bill_length_mm).

penguins_summary <- summarise( # Группируем по виду и полу, считаем средний размер клюва
  group_by(
    penguins,
    species,
    sex
  ),
  mean_bill_length = mean(bill_length_mm, na.rm = TRUE)
)
## `summarise()` has grouped output by 'species'. You can override using the
## `.groups` argument.
penguins_filtered <- filter( # Убираем пропущенные значения пола
  penguins_summary,
  !is.na(sex) # Оставляем только строки, где пол не NA
)
penguins_wide <- pivot_wider( # Преобразуем таблицу в нужный формат
  penguins_filtered,
  names_from = sex, # Столбцы будут создаваться из значений переменной sex
  values_from = mean_bill_length # Значения будут браться из переменной mean_bill_length
)
print(penguins_wide)
## # A tibble: 3 × 3
## # Groups:   species [3]
##   species   female  male
##   <fct>      <dbl> <dbl>
## 1 Adelie      37.3  40.4
## 2 Chinstrap   46.6  51.1
## 3 Gentoo      45.6  49.5