Вспоминаем что выучили в первую неделю

Author

Поздняков Иван

Вспоминаем основы R

  • Создайте вектор из значений 2, 20, 100.
Подсмотреть код (но лучше решите сами!)
c(2, 20, 100)
[1]   2  20 100
  • Создайте вектор из чисел от -20 до 20 с шагом 1.
Подсмотреть код (но лучше решите сами!)
-20:20
 [1] -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2
[20]  -1   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17
[39]  18  19  20
  • Создайте вектор из чисел от 0 до 1 с шагом 0.01.
Подсмотреть код (но лучше решите сами!)
seq(0, 1, .01)
  [1] 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14
 [16] 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29
 [31] 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44
 [46] 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59
 [61] 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71 0.72 0.73 0.74
 [76] 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89
 [91] 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00
  • Создайте вектор, в котором значения 1 и 2 будут попеременно повторяться 10 раз.
Подсмотреть код (но лучше решите сами!)
rep(c(1, 2), 10)
 [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2
  • Скопируйте код, чтобы создать вектор v.
v <- c(100, 3, 10, 15, 20, 30, -3, 4, 80, 20, 21)
v
 [1] 100   3  10  15  20  30  -3   4  80  20  21
  • Сколько значений в векторе v БОЛЬШЕ 20?
Подсмотреть код (но лучше решите сами!)
sum(v > 20)
[1] 4
  • Сколько значений в векторе v БОЛЬШЕ ИЛИ РАВНО 20?
Подсмотреть код (но лучше решите сами!)
sum(v >= 20)
[1] 6
  • Верните из вектора v все значения, которые БОЛЬШЕ ИЛИ РАВНЫ 20.
Подсмотреть код (но лучше решите сами!)
v[v >= 20]
[1] 100  20  30  80  20  21
  • Верните из вектора v все значения, которые БОЛЬШЕ ИЛИ РАВНЫ 20, но МЕНЬШЕ 50.
Подсмотреть код (но лучше решите сами!)
v[v >= 20 & v < 50]
[1] 20 30 20 21
  • Создайте строковый вектор такой же длины как и вектор v. Если значение в векторе v БОЛЬШЕ ИЛИ РАВНО 20, то в строковом векторе на соответствующей позиции должно быть значение "большое число", если меньше – "маленькое число".
Подсмотреть код (но лучше решите сами!)
ifelse(v >= 20, "большое число", "маленькое число")
 [1] "большое число"   "маленькое число" "маленькое число" "маленькое число"
 [5] "большое число"   "большое число"   "маленькое число" "маленькое число"
 [9] "большое число"   "большое число"   "большое число"  
  • Посчитайте 3 в 20й степени и сохраните результат в переменной numb.
Подсмотреть код (но лучше решите сами!)
numb <- 3 ^ 20
numb
[1] 3486784401
  • Создайте функцию what_is_it(), которая будет возвращать текстом содержание переменной на входе, добавив перед этим текст "В аргумент функции вы подали значение". Проверьте на переменной numb.

Дополнительно: проверьте на других значениях с разными типами данных.

Подсмотреть код (но лучше решите сами!)
what_is_it <- function(x) paste("В аргумент функции вы подали значение", x)
what_is_it(numb)
[1] "В аргумент функции вы подали значение 3486784401"

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

  • Создайте функцию what_is_it_with_type(), которая будет возвращать не только значение, но и тип данных (функция typeof()). Проверьте на переменной numb.
Подсмотреть код (но лучше решите сами!)
what_is_it_with_type <- function(x) paste("В аргумент функции вы подали значение", x, "типа", typeof(x))
what_is_it_with_type(numb)
[1] "В аргумент функции вы подали значение 3486784401 типа double"

Вспоминаем tidyverse

  • Скачайте набор данных про пингвинов используя следующий код:
library(tidyverse)
penguins <- readr::read_csv("https://raw.githubusercontent.com/Pozdniakov/tidy_stats/master/data/penguins.csv")
penguins
# A tibble: 344 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>   <chr>              <dbl>         <dbl>             <dbl>       <dbl>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
# ℹ 334 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Выберите из датасета 1, 10 и 100 строчку.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  slice(1, 10, 100)
# A tibble: 3 × 8
  species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <chr>   <chr>              <dbl>         <dbl>             <dbl>       <dbl>
1 Adelie  Torgersen           39.1          18.7               181        3750
2 Adelie  Torgersen           42            20.2               190        4250
3 Adelie  Dream               43.2          18.5               192        4100
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Выберите только пингвинов с острова "Dream".
Подсмотреть код (но лучше решите сами!)
penguins %>%
  filter(island == "Dream")
# A tibble: 124 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>   <chr>           <dbl>         <dbl>             <dbl>       <dbl>
 1 Adelie  Dream            39.5          16.7               178        3250
 2 Adelie  Dream            37.2          18.1               178        3900
 3 Adelie  Dream            39.5          17.8               188        3300
 4 Adelie  Dream            40.9          18.9               184        3900
 5 Adelie  Dream            36.4          17                 195        3325
 6 Adelie  Dream            39.2          21.1               196        4150
 7 Adelie  Dream            38.8          20                 190        3950
 8 Adelie  Dream            42.2          18.5               180        3550
 9 Adelie  Dream            37.6          19.3               181        3300
10 Adelie  Dream            39.8          19.1               184        4650
# ℹ 114 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Верните только самых тяжелых пингвинов: с весом более 5000 грамм:
Подсмотреть код (но лучше решите сами!)
penguins %>%
  filter(body_mass_g > 5000)
# A tibble: 61 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>   <chr>           <dbl>         <dbl>             <dbl>       <dbl>
 1 Gentoo  Biscoe           50            16.3               230        5700
 2 Gentoo  Biscoe           50            15.2               218        5700
 3 Gentoo  Biscoe           47.6          14.5               215        5400
 4 Gentoo  Biscoe           46.7          15.3               219        5200
 5 Gentoo  Biscoe           46.8          15.4               215        5150
 6 Gentoo  Biscoe           49            16.1               216        5550
 7 Gentoo  Biscoe           48.4          14.6               213        5850
 8 Gentoo  Biscoe           49.3          15.7               217        5850
 9 Gentoo  Biscoe           49.2          15.2               221        6300
10 Gentoo  Biscoe           48.7          15.1               222        5350
# ℹ 51 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Верните всех пингвинов, которые тяжелее среднего.

P.S. Внимательно: здесь есть NA!

Подсмотреть код (но лучше решите сами!)
penguins %>%
  filter(body_mass_g > mean(body_mass_g, na.rm = TRUE))
# A tibble: 149 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>   <chr>              <dbl>         <dbl>             <dbl>       <dbl>
 1 Adelie  Torgersen           39.2          19.6               195        4675
 2 Adelie  Torgersen           42            20.2               190        4250
 3 Adelie  Torgersen           34.6          21.1               198        4400
 4 Adelie  Torgersen           42.5          20.7               197        4500
 5 Adelie  Dream               39.8          19.1               184        4650
 6 Adelie  Dream               44.1          19.7               196        4400
 7 Adelie  Dream               39.6          18.8               190        4600
 8 Adelie  Biscoe              40.1          18.9               188        4300
 9 Adelie  Biscoe              41.3          21.1               195        4400
10 Adelie  Torgersen           41.8          19.4               198        4450
# ℹ 139 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Выберите 5 случайных строчек из penguins (естественно, в этом задании результаты будут отличаться)
Подсмотреть код (но лучше решите сами!)
set.seed(42)
penguins %>%
  slice_sample(n = 5)
# A tibble: 5 × 8
  species   island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <chr>     <chr>              <dbl>         <dbl>             <dbl>       <dbl>
1 Adelie    Dream               36            17.9               190        3450
2 Chinstrap Dream               50.9          17.9               196        3675
3 Gentoo    Biscoe              46.1          13.2               211        4500
4 Adelie    Torgersen           45.8          18.9               197        4150
5 Gentoo    Biscoe              48.6          16                 230        5800
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Удалите все строчки penguins (не перезаписывая переменную penguins, просто верните в консоль), в которых содержится хотя бы один NA.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  drop_na()
# A tibble: 333 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>   <chr>              <dbl>         <dbl>             <dbl>       <dbl>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           36.7          19.3               193        3450
 5 Adelie  Torgersen           39.3          20.6               190        3650
 6 Adelie  Torgersen           38.9          17.8               181        3625
 7 Adelie  Torgersen           39.2          19.6               195        4675
 8 Adelie  Torgersen           41.1          17.6               182        3200
 9 Adelie  Torgersen           38.6          21.2               191        3800
10 Adelie  Torgersen           34.6          21.1               198        4400
# ℹ 323 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Выберите из penguins следующие колонки: species, sex, body_mass_g.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  select(species, sex, body_mass_g)
# A tibble: 344 × 3
   species sex    body_mass_g
   <chr>   <chr>        <dbl>
 1 Adelie  male          3750
 2 Adelie  female        3800
 3 Adelie  female        3250
 4 Adelie  <NA>            NA
 5 Adelie  female        3450
 6 Adelie  male          3650
 7 Adelie  female        3625
 8 Adelie  male          4675
 9 Adelie  <NA>          3475
10 Adelie  <NA>          4250
# ℹ 334 more rows
  • Выберите из penguins только числовые колонки:
Подсмотреть код (но лучше решите сами!)
penguins %>%
  select(where(is.numeric))
# A tibble: 344 × 5
   bill_length_mm bill_depth_mm flipper_length_mm body_mass_g  year
            <dbl>         <dbl>             <dbl>       <dbl> <dbl>
 1           39.1          18.7               181        3750  2007
 2           39.5          17.4               186        3800  2007
 3           40.3          18                 195        3250  2007
 4           NA            NA                  NA          NA  2007
 5           36.7          19.3               193        3450  2007
 6           39.3          20.6               190        3650  2007
 7           38.9          17.8               181        3625  2007
 8           39.2          19.6               195        4675  2007
 9           34.1          18.1               193        3475  2007
10           42            20.2               190        4250  2007
# ℹ 334 more rows
  • Выберите из penguins только строковые колонки:
Подсмотреть код (но лучше решите сами!)
penguins %>%
  select(where(is.character))
# A tibble: 344 × 3
   species island    sex   
   <chr>   <chr>     <chr> 
 1 Adelie  Torgersen male  
 2 Adelie  Torgersen female
 3 Adelie  Torgersen female
 4 Adelie  Torgersen <NA>  
 5 Adelie  Torgersen female
 6 Adelie  Torgersen male  
 7 Adelie  Torgersen female
 8 Adelie  Torgersen male  
 9 Adelie  Torgersen <NA>  
10 Adelie  Torgersen <NA>  
# ℹ 334 more rows
  • Отсортируйте строчки в порядке ВОЗРАСТАНИЯ bill_length_mm.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  arrange(bill_length_mm)
# A tibble: 344 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>   <chr>              <dbl>         <dbl>             <dbl>       <dbl>
 1 Adelie  Dream               32.1          15.5               188        3050
 2 Adelie  Dream               33.1          16.1               178        2900
 3 Adelie  Torgersen           33.5          19                 190        3600
 4 Adelie  Dream               34            17.1               185        3400
 5 Adelie  Torgersen           34.1          18.1               193        3475
 6 Adelie  Torgersen           34.4          18.4               184        3325
 7 Adelie  Biscoe              34.5          18.1               187        2900
 8 Adelie  Torgersen           34.6          21.1               198        4400
 9 Adelie  Torgersen           34.6          17.2               189        3200
10 Adelie  Biscoe              35            17.9               190        3450
# ℹ 334 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Отсортируйте строчки в порядке УБЫВАНИЯ bill_length_mm.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  arrange(desc(bill_length_mm))
# A tibble: 344 × 8
   species   island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <chr>     <chr>           <dbl>         <dbl>             <dbl>       <dbl>
 1 Gentoo    Biscoe           59.6          17                 230        6050
 2 Chinstrap Dream            58            17.8               181        3700
 3 Gentoo    Biscoe           55.9          17                 228        5600
 4 Chinstrap Dream            55.8          19.8               207        4000
 5 Gentoo    Biscoe           55.1          16                 230        5850
 6 Gentoo    Biscoe           54.3          15.7               231        5650
 7 Chinstrap Dream            54.2          20.8               201        4300
 8 Chinstrap Dream            53.5          19.9               205        4500
 9 Gentoo    Biscoe           53.4          15.8               219        5500
10 Chinstrap Dream            52.8          20                 205        4550
# ℹ 334 more rows
# ℹ 2 more variables: sex <chr>, year <dbl>
  • Сколько пингвинов в penguins по ВИДАМ (species)?

    Подсмотреть код (но лучше решите сами!)
    penguins %>%
      count(species)
    # A tibble: 3 × 2
      species       n
      <chr>     <int>
    1 Adelie      152
    2 Chinstrap    68
    3 Gentoo      124
  • Сколько пингвинов в penguins по ВИДАМ (species) и ОСТРОВАМ (island)?

    Подсмотреть код (но лучше решите сами!)
    penguins %>%
      count(species, island)
    # A tibble: 5 × 3
      species   island        n
      <chr>     <chr>     <int>
    1 Adelie    Biscoe       44
    2 Adelie    Dream        56
    3 Adelie    Torgersen    52
    4 Chinstrap Dream        68
    5 Gentoo    Biscoe      124
  • Посчитайте среднюю массу пингвинов по ПОЛУ (sex). Не забывайте, что в body_mass_g есть NA!

Подсмотреть код (но лучше решите сами!)
penguins %>%
  group_by(sex) %>%
  summarise(mean_body_mass_g = mean(body_mass_g, na.rm = TRUE))
# A tibble: 3 × 2
  sex    mean_body_mass_g
  <chr>             <dbl>
1 female            3862.
2 male              4546.
3 <NA>              4006.
  • Посчитайте среднюю массу пингвинов по ПОЛУ (sex) и ОСТРОВУ (island).
Подсмотреть код (но лучше решите сами!)
penguins %>%
  group_by(sex, island) %>%
  summarise(mean_body_mass_g = mean(body_mass_g, na.rm = TRUE))
`summarise()` has grouped output by 'sex'. You can override using the `.groups`
argument.
# A tibble: 9 × 3
# Groups:   sex [3]
  sex    island    mean_body_mass_g
  <chr>  <chr>                <dbl>
1 female Biscoe               4319.
2 female Dream                3446.
3 female Torgersen            3396.
4 male   Biscoe               5105.
5 male   Dream                3987.
6 male   Torgersen            4035.
7 <NA>   Biscoe               4588.
8 <NA>   Dream                2975 
9 <NA>   Torgersen            3681.
  • Теперь сделайте из результата предыдущего задания табличку в широком виде: столбцы – острова, строки – пол, в ячейках содержится средняя масса пингвинов по полу и острову.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  group_by(sex, island) %>%
  summarise(mean_body_mass_g = mean(body_mass_g, na.rm = TRUE)) %>%
  pivot_wider(names_from = island, values_from = mean_body_mass_g)
`summarise()` has grouped output by 'sex'. You can override using the `.groups`
argument.
# A tibble: 3 × 4
# Groups:   sex [3]
  sex    Biscoe Dream Torgersen
  <chr>   <dbl> <dbl>     <dbl>
1 female  4319. 3446.     3396.
2 male    5105. 3987.     4035.
3 <NA>    4588. 2975      3681.
  • Поменяйте код для предыдущего задания таким образом, чтобы по столбцам был пол, а строкам – остров.
Подсмотреть код (но лучше решите сами!)
penguins %>%
  group_by(sex, island) %>%
  summarise(mean_body_mass_g = mean(body_mass_g, na.rm = TRUE)) %>%
  pivot_wider(names_from = sex, values_from = mean_body_mass_g)
`summarise()` has grouped output by 'sex'. You can override using the `.groups`
argument.
# A tibble: 3 × 4
  island    female  male  `NA`
  <chr>      <dbl> <dbl> <dbl>
1 Biscoe     4319. 5105. 4588.
2 Dream      3446. 3987. 2975 
3 Torgersen  3396. 4035. 3681.