5 Задания
5.1 Вектор
- Посчитайте логарифм от 8912162342 по основанию 6
## [1] 12.7867
- Теперь натуральный логарифм 10 и умножьте его на 5
## [1] 11.51293
- Создайте вектор от 1 до 20
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
- Создайте вектор от 20 до 1
## [1] 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- Создайте вектор от 1 до 20 и снова до 1. Число 20 должно присутствовать только один раз!
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 19 18 17
## [24] 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
- Создайте вектор 2, 4, 6, … , 18, 20
## [1] 2 4 6 8 10 12 14 16 18 20
- Создайте вектор из одной единицы, двух двоек, трех троек, …. , девяти девяток
## [1] 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 6 6 6 6 6 6 7 7 7 7 7 7 7 8 8 8 8 8 8 8
## [36] 8 9 9 9 9 9 9 9 9 9
- Сделайте вектор vec, в котором соедините
3, а также значения"Мой"и"вектор".
## [1] "3" "Мой" "вектор"
- Вычесть
TRUEиз 10
## [1] 9
- Соедините значение
10иTRUEв векторvec
## [1] 10 1
- Соедините вектор
vecи значение"r":
## [1] "10" "1" "r"
- Соедините значения
10,TRUE,"r"в вектор.
## [1] "10" "TRUE" "r"
5.2 Вектор. Операции с векторами
Создайте вектор p, состоящий из значений 4, 5, 6, 7, и вектор q, состоящий из 0, 1, 2, 3.
## [1] 4 5 6 7
## [1] 0 1 2 3
Посчитайте поэлементную сумму векторов p и q:
## [1] 4 6 8 10
Посчитайте поэлементную разницу p и q:
## [1] 4 4 4 4
Поделите каждый элемент вектора p на соответствующий ему элемент вектора q:
О, да, Вам нужно делить на 0!
## [1] Inf 5.000000 3.000000 2.333333
Возведите каждый элемент вектора p в степень соответствующего ему элемента вектора q:
## [1] 1 5 36 343
Создайте вектор квадратов чисел от 1 до 10:
## [1] 1 4 9 16 25 36 49 64 81 100
Создайте вектор 0, 2, 0, 4, … , 18, 0, 20
## [1] 0 2 0 4 0 6 0 8 0 10 0 12 0 14 0 16 0 18 0 20
5.3 Вектор. Индексирование
Создайте вектор vec1:
vec1 <- c(3, 5, 2, 1, 8, 4, 9, 10, 3, 15, 1, 11)- Найдите второй элемент вектора
vec1:
## [1] 5
- Найдите последний элемент вектора
vec1
## [1] 11
- Найдите все значения вектора
vec1, которые больше 4
## [1] 5 8 9 10 15 11
- Найдите все значения вектора vec1, которые больше 4, но меньше 10
## [1] 5 8 9
- Возведите в квадрат каждое значение вектора
vec1
## [1] 9 25 4 1 64 16 81 100 9 225 1 121
- Возведите в квадрат каждое значение вектора на нечетной позиции и извлеките корень из каждого значения на четной позиции вектора
vec1
## [1] 9.000000 2.236068 4.000000 1.000000 64.000000 2.000000 81.000000
## [8] 3.162278 9.000000 3.872983 1.000000 3.316625
- Создайте вектор
vec2, в котором будут значения все значенияvec1, которые меньше 10 будут заменены наNA.
## [1] NA NA NA NA NA NA NA 10 NA 15 NA 11
- Посчитайте сумму
vec2с помощью функцииsum(). ОтветNAне считается!
## [1] 36
- Создайте вектор 2, 4, 6, … , 18, 20 как минимум 2 новыми способами
Знаю, это задание может показаться бессмысленным, но это очень базовая операция, с помощью которой можно, например, разделить данные на две части. Чем больше способов Вы знаете, тем лучше!
## [1] 2 4 6 8 10 12 14 16 18 20
5.4 Матрицы
- Создайте матрицу 4х4, состоящую из единиц. Назовите ее
M
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 1
## [2,] 1 1 1 1
## [3,] 1 1 1 1
## [4,] 1 1 1 1
- Поменяйте все некрайние значения матрицы
M(то есть значения на позициях [2,2], [2,3], [3,2] и [3,3]) на число 2.
## [,1] [,2] [,3] [,4]
## [1,] 1 1 1 1
## [2,] 1 2 2 1
## [3,] 1 2 2 1
## [4,] 1 1 1 1
- Выделите второй и третий столбик из матрицы
M
## [,1] [,2]
## [1,] 1 1
## [2,] 2 2
## [3,] 2 2
## [4,] 1 1
- Сравните (
==) вторую колонку и вторую строчку матрицыM
## [1] TRUE TRUE TRUE TRUE
- Создайте таблицу умножения (9х9) в виде матрицы. Сохраните ее в переменную
tab:
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 1 2 3 4 5 6 7 8 9
## [2,] 2 4 6 8 10 12 14 16 18
## [3,] 3 6 9 12 15 18 21 24 27
## [4,] 4 8 12 16 20 24 28 32 36
## [5,] 5 10 15 20 25 30 35 40 45
## [6,] 6 12 18 24 30 36 42 48 54
## [7,] 7 14 21 28 35 42 49 56 63
## [8,] 8 16 24 32 40 48 56 64 72
## [9,] 9 18 27 36 45 54 63 72 81
- Из матрицы
tabвыделите подматрицу, включающую в себя только строчки с 6 по 8 и столбцы с 3 по 7.
## [,1] [,2] [,3] [,4] [,5]
## [1,] 18 24 30 36 42
## [2,] 21 28 35 42 49
## [3,] 24 32 40 48 56
- Создайте матрицу с логическими значениями, где
TRUE, если в этом месте в таблице умножения (tab) двузначное число иFALSE, если однозначное.
Матрица - это почти вектор. К нему можно обращаться с единственным индексом.
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE
## [3,] FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
## [4,] FALSE FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [5,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [6,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [7,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [8,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
## [9,] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
- Создайте матрицу
tab2, в которой все значенияtabменьше 10 заменены на 0.
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
## [1,] 0 0 0 0 0 0 0 0 0
## [2,] 0 0 0 0 10 12 14 16 18
## [3,] 0 0 0 12 15 18 21 24 27
## [4,] 0 0 12 16 20 24 28 32 36
## [5,] 0 10 15 20 25 30 35 40 45
## [6,] 0 12 18 24 30 36 42 48 54
## [7,] 0 14 21 28 35 42 49 56 63
## [8,] 0 16 24 32 40 48 56 64 72
## [9,] 0 18 27 36 45 54 63 72 81
5.5 Списки
Дан список list_1:
list_1 = list(numbers = 1:5, letters = letters, logic = T)
list_1## $numbers
## [1] 1 2 3 4 5
##
## $letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
##
## $logic
## [1] TRUE
- Найдите первый элемент списка. Ответ должен быть списком.
## $numbers
## [1] 1 2 3 4 5
- Теперь найдите содержание первого элемента списка двумя разными способами. Ответ должен быть вектором.
## [1] 1 2 3 4 5
## [1] 1 2 3 4 5
Теперь возьмите первый элемент содержания первого элемента списка. Ответ должен быть вектором.
## [1] 1
Создайте список list_2, содержащий в себе два списка list_1 с именами pupa и lupa.
## $pupa
## $pupa$numbers
## [1] 1 2 3 4 5
##
## $pupa$letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
##
## $pupa$logic
## [1] TRUE
##
##
## $lupa
## $lupa$numbers
## [1] 1 2 3 4 5
##
## $lupa$letters
## [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
##
## $lupa$logic
## [1] TRUE
Извлеките первый элемент списка, из него - второй полэлемент, а из него - третье значение
## [1] "c"
5.6 Датафрейм
- Кто является 274ым персонажем в
gotдатафрейме? Из какого он дома?
## Name Allegiances
## 274 Gendry None
- Найдите имена всех персонажей из дома (
Allegiances)"Tyrell"и"House Tyrell".
## [1] "Alerie Hightower" "Alla Tyrell" "Alyn Ambrose"
## [4] "Arryk (Guard)" "Arwyn Oakheart" "Bayard Norcross"
## [7] "Blue Bard" "Butterbumps" "Elinor Tyrell"
## [10] "Erryk (Guard)" "Garlan Tyrell" "Hobber Redwyne"
## [13] "Horas Redwyne" "Janna Tyrell" "Kerwin"
## [16] "Leo Tyrell" "Leonette Fossoway" "Loras Tyrell"
## [19] "Mace Tyrell" "Margaery Tyrell" "Megga Tyrell"
## [22] "Meredyth Crane" "Olenna Redwyne" "Paxter Redwyne"
## [25] "Randyll Tarly" "Talbert Serry"
- Создайте новый датафрейм
greyjoy_women, который будет включать в себя только женщин Грейджоев ("Greyjoy","House Greyjoy")
## Name Allegiances Death.Year Book.of.Death
## 58 Asha Greyjoy House Greyjoy NA NA
## 248 Falia Flowers Greyjoy NA NA
## 313 Gwin Goodbrother Greyjoy NA NA
## 319 Gysella Goodbrother Greyjoy NA NA
## 806 Three-Tooth Greyjoy NA NA
## Death.Chapter Book.Intro.Chapter Gender Nobility GoT CoK SoS FfC DwD
## 58 NA 11 0 1 0 1 0 1 1
## 248 NA 29 0 0 0 0 0 1 0
## 313 NA 1 0 1 0 0 0 1 0
## 319 NA 1 0 1 0 0 0 1 0
## 806 NA 11 0 0 0 0 0 1 0
## Is.Alive Houses
## 58 Alive Greyjoy
## 248 Alive Greyjoy
## 313 Alive Greyjoy
## 319 Alive Greyjoy
## 806 Alive Greyjoy
- Сколько всего женских персонажей в книгах “Песни льда и пламени”?
## [1] 157
- Сколько всего женских персонажей дворянского происхождения в книгах “Песни льда и пламени”?
## [1] 84
- Поcчитатйе процентную (!) долю знати от общего числа персонажей (
Nobility) вNight's Watch.
## [1] 9.482759
- Поcчитатйе процентную (!) долю знати от общего числа персонажей (
Nobility) уLannister.
## [1] 71.60494
- Какая из книг цикла самая кровавая? Для ответа на этот вопрос подсчитайте таблицу частот для колонки
got$Book.of.Death:
Это можно сделать с помощью функции
table(), но в дальнейшем Вы узнаете и другие способы - подобная задача возникает достаточно часто.
##
## 1 2 3 4 5
## 49 73 97 27 61
5.7 Создание функций
- Создайте функцию
plus_one(), которая принимает число и возвращает это же число + 1
plus_one(41)## [1] 42
- Создайте функцию
kvadrat()возвращающее число в квадрате
kvadrat(6)## [1] 36
- Создайте функцию
century(), которая превращает год в век. Возможно, понадобится вспомнить, как года переводятся в века.
Здесь нужно немного погуглить.
century(1999:2002)## [1] 20 20 21 21
- *А теперь сделайте функцию
century_roman(), которая переводит год в век, записанный римскими цифрами!
Здесь нужно просто немного погуглить - возможно, для создания римских цифр есть уже готовая функция? Прежде созданные функции можно использовать для создания новых функций!
century_roman(1999:2002)## [1] XX XX XXI XXI
- *Напишите функцию
is_prime(), которая проверяет, является ли число простым.
Здесь может понадобиться оператор для получения остатка от деления:
%%. Еще может пригодиться функцияany()- она возвращаетTRUE, если в векторе есть хотя бы одинTRUE
is_prime(2017)## [1] TRUE
is_prime(2019)## [1] FALSE
2019/3 #2019 делится на 3 без остатка## [1] 673
is_prime(2020)## [1] FALSE
- *Создайте функцию
monotonic(), которая принимает возвращаетTRUE, если значения в векторе не убывают (то есть каждое следующее - больше или равно предыдущему) или не возврастают.
monotonic(1:7)## [1] TRUE
monotonic(c(1:5,5:1))## [1] FALSE
monotonic(6:-1)## [1] TRUE
monotonic(c(1:5, rep(5, 10), 5:10))## [1] TRUE
5.8 Семейство apply()
- Посчитайте, в какой из 5 книг больше всего персонажей.
## GoT CoK SoS FfC DwD
## 250 324 389 250 261
- Сделайте датафрейм
heroesс персонажами, которые присутствовали во всех книгах.
## Name Allegiances Death.Year Book.of.Death
## 56 Arya Stark Stark NA NA
## 63 Balon Swann Lannister NA NA
## 104 Boros Blount Baratheon NA NA
## 131 Cersei Lannister House Lannister NA NA
## 302 Grenn Night's Watch NA NA
## 345 Harys Swyft Lannister NA NA
## 383 Jaime Lannister Lannister NA NA
## 410 Jon Snow Night's Watch NA NA
## 436 Kevan Lannister House Lannister 300 5
## 452 Lancel Lannister Lannister NA NA
## 548 Meryn Trant Lannister NA NA
## 652 Pycelle House Lannister 300 5
## 741 Samwell Tarly Night's Watch NA NA
## Death.Chapter Book.Intro.Chapter Gender Nobility GoT CoK SoS FfC DwD
## 56 NA 2 0 1 1 1 1 1 1
## 63 NA 29 1 1 1 1 1 1 1
## 104 NA 8 1 1 1 1 1 1 1
## 131 NA 4 0 1 1 1 1 1 1
## 302 NA 19 1 0 1 1 1 1 1
## 345 NA 69 1 1 1 1 1 1 1
## 383 NA 5 1 1 1 1 1 1 1
## 410 NA 1 1 1 1 1 1 1 1
## 436 NA 56 1 1 1 1 1 1 1
## 452 NA 47 1 1 1 1 1 1 1
## 548 NA 8 1 1 1 1 1 1 1
## 652 NA 20 1 0 1 1 1 1 1
## 741 NA 70 1 1 1 1 1 1 1
## Is.Alive Houses
## 56 Alive Stark
## 63 Alive Lannister
## 104 Alive Baratheon
## 131 Alive Lannister
## 302 Alive Night's Watch
## 345 Alive Lannister
## 383 Alive Lannister
## 410 Alive Night's Watch
## 436 Dead Lannister
## 452 Alive Lannister
## 548 Alive Lannister
## 652 Dead Lannister
## 741 Alive Night's Watch
- Создайте функцию
na_n(), которая будет возвращать количествоNAв векторе.
na_n(c(NA, 3:5, NA, 2, NA))## [1] 3
- Посчитайте количество NA в каждом столбце
got.
## Name Allegiances Death.Year
## 0 0 612
## Book.of.Death Death.Chapter Book.Intro.Chapter
## 610 618 12
## Gender Nobility GoT
## 0 0 0
## CoK SoS FfC
## 0 0 0
## DwD Is.Alive Houses
## 0 0 0
- Есть список
spisok:
spisok <- list(1:5, 0:20, 4:24, 6:3, 6:25)- Посчитайте сумму каждого вектора.
## [1] 15 210 294 18 310
- А теперь длину.
## [1] 5 21 21 4 20
Напишите функцию
max_item(), которая будет принимать на входе список, а возвращать - (первый) самый длинный его элемент.Теперь мы сделаем сложный список:
large_spisok <- list(1:3, 3:40, spisok)- Посчитайте длину каждого вектора в списке, в т.ч. для списка внутри
Для этого может понадобиться функция
rapply(): recursive lapply
## [[1]]
## [1] 3
##
## [[2]]
## [1] 38
##
## [[3]]
## [[3]][[1]]
## [1] 5
##
## [[3]][[2]]
## [1] 21
##
## [[3]][[3]]
## [1] 21
##
## [[3]][[4]]
## [1] 4
##
## [[3]][[5]]
## [1] 20
5.9 Работа с текстом
Дан строковый вектор:
s <- c("Я", "выучу", "R", "за", "май!")- Соедините вектор в одно строковое значение
ch
## [1] "Я выучу R за май!"
- Подсчитайте количество знаков в
ch
## [1] 17
- Следующее задание: вырезать Замая
## [1] "за май"
- Превратите
chобратно в вектор, значения которого - отдельные слова:
## [1] "Я" "выучу" "R" "за" "май!"
- Создайте дополнительную колонку в
gotпод названиемinfo, в которой будет написано: “ИМЯ_ПЕРСОНАЖА from House ЕГО_ДОМ is dead/alive” в зависимости от его статуса
## [1] "Addam Marbrand from House Lannister is Alive"
## [2] "Aegon Frey (Jinglebell) from House None is Dead"
## [3] "Aegon Targaryen from House Targaryen is Alive"
## [4] "Adrack Humble from House Greyjoy is Dead"
## [5] "Aemon Costayne from House Lannister is Alive"
## [6] "Aemon Estermont from House Baratheon is Alive"
- Посчитайте длину самого короткого имени в “Песни льда и пламени”?
## [1] 3
- На самом деле, функция
which.max()выдает только индекс первого максимального значения, даже если их несколько. Это же верно для функцииwhich.min().
Напишите функцию which.all.min(), которая выдает индексы всех минимальных значений векторов.
Проверьте, что эта функция работает на длине имен персонажей:
## Name Allegiances Death.Year Book.of.Death Death.Chapter
## 81 Ben None NA NA NA
## 178 Del Wildling 299 3 41
## 352 Hod None NA NA NA
## 459 Lem None NA NA NA
## 467 Lew House Stark NA NA NA
## 590 Nan House Stark NA NA NA
## 602 Ogo None 298 1 61
## 640 Pia None NA NA NA
## 653 Pyg None 300 4 20
## 734 Ryk Wildling NA NA NA
## 850 Utt None 299 3 39
## 851 Val Wildling NA NA NA
## 912 Zei Stark NA NA NA
## Book.Intro.Chapter Gender Nobility GoT CoK SoS FfC DwD Is.Alive
## 81 37 1 0 0 0 0 1 0 Alive
## 178 41 1 0 0 0 1 0 0 Dead
## 352 5 1 0 0 1 0 0 0 Alive
## 459 13 1 0 0 0 1 1 0 Alive
## 467 7 1 0 1 0 0 0 0 Alive
## 590 1 0 0 1 1 0 0 0 Alive
## 602 46 1 1 1 0 0 0 0 Dead
## 640 30 0 0 0 1 0 1 0 Alive
## 653 20 1 0 0 0 1 1 0 Dead
## 734 7 1 0 0 0 1 0 0 Alive
## 850 30 1 0 0 1 1 0 0 Dead
## 851 7 0 0 0 0 1 0 1 Alive
## 912 64 0 0 0 0 1 0 0 Alive
## Houses info
## 81 None Ben from House None is Alive
## 178 Wildling Del from House Wildling is Dead
## 352 None Hod from House None is Alive
## 459 None Lem from House None is Alive
## 467 Stark Lew from House Stark is Alive
## 590 Stark Nan from House Stark is Alive
## 602 None Ogo from House None is Dead
## 640 None Pia from House None is Alive
## 653 None Pyg from House None is Dead
## 734 Wildling Ryk from House Wildling is Alive
## 850 None Utt from House None is Dead
## 851 Wildling Val from House Wildling is Alive
## 912 Stark Zei from House Stark is Alive
- Создайте функцию
is_anagram(), которая будет выдаватьTRUEесли одно слово является анаграммой другого.
Проверьте, работает ли функция, на двух векторах:
a <- c("спаниель", "капюшон", "state")
b <- c("апельсин", "парашют", "taste")Нужно либо векторизовать функцию (сделать так, чтобы она могла принимать вектора на входе), либо использовать mapply(). Есть простой и хитрый способ векторизовать функцию - Vectorize(). Постарайтесь все-таки не использовать for, пожалуйста.
## спаниель капюшон state
## TRUE FALSE TRUE
5.10 data.table
Найдите все битвы, в которых attacker_king - Robb Stark.
## name year battle_number attacker_king
## 1: Battle of the Green Fork 298 4 Robb Stark
## 2: Battle of the Whispering Wood 298 5 Robb Stark
## 3: Battle of the Camps 298 6 Robb Stark
## 4: Battle of Torrhen's Square 299 11 Robb Stark
## 5: Battle of Oxcross 299 15 Robb Stark
## 6: Sack of Harrenhal 299 18 Robb Stark
## 7: Battle of the Crag 299 19 Robb Stark
## 8: Siege of Darry 299 21 Robb Stark
## 9: Battle of Duskendale 299 22 Robb Stark
## 10: Siege of Seagard 299 27 Robb Stark
## defender_king attacker_1 attacker_2 attacker_3 attacker_4
## 1: Joffrey/Tommen Baratheon Stark
## 2: Joffrey/Tommen Baratheon Stark Tully
## 3: Joffrey/Tommen Baratheon Stark Tully
## 4: Balon/Euron Greyjoy Stark
## 5: Joffrey/Tommen Baratheon Stark Tully
## 6: Joffrey/Tommen Baratheon Stark
## 7: Joffrey/Tommen Baratheon Stark
## 8: Joffrey/Tommen Baratheon Darry
## 9: Joffrey/Tommen Baratheon Stark
## 10: Joffrey/Tommen Baratheon Frey
## defender_1 defender_2 defender_3 defender_4 attacker_outcome
## 1: Lannister NA NA loss
## 2: Lannister NA NA win
## 3: Lannister NA NA win
## 4: Greyjoy NA NA win
## 5: Lannister NA NA win
## 6: Lannister NA NA win
## 7: Lannister NA NA win
## 8: Lannister NA NA win
## 9: Lannister NA NA loss
## 10: Mallister NA NA win
## battle_type major_death major_capture attacker_size defender_size
## 1: pitched battle 1 1 18000 20000
## 2: ambush 1 1 1875 6000
## 3: ambush 0 0 6000 12625
## 4: pitched battle 0 0 244 900
## 5: ambush 1 1 6000 10000
## 6: ambush 1 0 100 100
## 7: ambush 0 0 6000 NA
## 8: siege 0 0 NA NA
## 9: pitched battle 1 0 3000 NA
## 10: siege 0 1 NA NA
## attacker_commander
## 1: Roose Bolton, Wylis Manderly, Medger Cerwyn, Harrion Karstark, Halys Hornwood
## 2: Robb Stark, Brynden Tully
## 3: Robb Stark, Tytos Blackwood, Brynden Tully
## 4: Rodrik Cassel, Cley Cerwyn
## 5: Robb Stark, Brynden Tully
## 6: Roose Bolton, Vargo Hoat, Robett Glover
## 7: Robb Stark, Smalljon Umber, Black Walder Frey
## 8: Helman Tallhart
## 9: Robertt Glover, Helman Tallhart
## 10: Walder Frey
## defender_commander
## 1: Tywin Lannister, Gregor Clegane, Kevan Lannister, Addam Marbrand
## 2: Jaime Lannister
## 3: Lord Andros Brax, Forley Prester
## 4: Dagmer Cleftjaw
## 5: Stafford Lannister, Roland Crakehall, Antario Jast
## 6: Amory Lorch
## 7: Rolph Spicer
## 8:
## 9: Randyll Tarly, Gregor Clegane
## 10: Jason Mallister
## summer location region
## 1: 1 Green Fork The Riverlands
## 2: 1 Whispering Wood The Riverlands
## 3: 1 Riverrun The Riverlands
## 4: 1 Torrhen's Square The North
## 5: 1 Oxcross The Westerlands
## 6: 1 Harrenhal The Riverlands
## 7: 1 Crag The Westerlands
## 8: 1 Darry The Riverlands
## 9: 1 Duskendale The Crownlands
## 10: 1 Seagard The Riverlands
## note
## 1:
## 2:
## 3:
## 4: Greyjoy's troop number comes from the 264 estimate to have arrived on the stony shore minus the 20 Theon takes to attack Winterfell. Thus 264-20=244
## 5:
## 6:
## 7:
## 8:
## 9:
## 10:
## outcome all_army ratio_army
## 1: Победа защищающихся 38000 0.9000000
## 2: Победа атакующих 7875 0.3125000
## 3: Победа атакующих 18625 0.4752475
## 4: Победа атакующих 1144 0.2711111
## 5: Победа атакующих 16000 0.6000000
## 6: Победа атакующих 200 1.0000000
## 7: Победа атакующих NA NA
## 8: Победа атакующих NA NA
## 9: Победа защищающихся NA NA
## 10: Победа атакующих NA NA
Как они заканчивались?
## attacker_outcome N
## 1: loss 2
## 2: win 8
Найдите, в битвах какого типа проигрывал Robb Stark как атакующий король.
## attacker_outcome battle_type N
## 1: loss pitched battle 2
## 2: win ambush 5
## 3: win pitched battle 1
## 4: win siege 2
5.11 Решейпинг
- Допустим, у вас есть следующий
data.table:
iq <- data.table(id = 1:3, iq_before = c(98, 106, 102), iq_after = c(103, 105, 103))- Превратите широкий iq в длинный iq_long с колонками
id,time,IQ
## id time IQ
## 1: 1 iq_before 98
## 2: 2 iq_before 106
## 3: 3 iq_before 102
## 4: 1 iq_after 103
## 5: 2 iq_after 105
## 6: 3 iq_after 103
- В колонке
timeдолжно быть значениеbeforeилиafter
## id time IQ
## 1: 1 before 98
## 2: 2 before 106
## 3: 3 before 102
## 4: 1 after 103
## 5: 2 after 105
## 6: 3 after 103
- А теперь обратно
iq_longв широкий формат:
## id after before
## 1: 1 103 98
## 2: 2 105 106
## 3: 3 103 102
5.12 Описательная статистика
Вспомните все описательные статистики, которые мы прошли, и примените их на векторе
pbcdt$chol(количество холистерина). Попытайтесь представить, как будут распределены эти данные исходя из результатов.Посчитайте описательные статистики
Создайте функцию
check_outliers(), которая принимает как аргумент числовой вектор, а возвращает логический вектор:TRUE- если есть значения больше или меньше чем 3 стандартных отклонения от среднего,FALSEв обратнос случае. Проверьте функцию на вектореpbcdt$chol. Посчитайте количествоTRUEв результате.
## [1] 8
- Измените функцию
check_outliers(), чтобы у нее появился параметрn =со значением 3 по умолчанию. От этого параметра должно зависеть количество стандартных отклонений от среднего в формуле. Проверьте функцию на том же векторе иn = 2:
sum(check_outliers(pbcdt$chol, n = 2))## [1] 13
- Добавим в функцию
check_outliers()еще больше гибкости. Теперь функция сможет принимать на вход еще и функции центральной тенденции и вариабельностиcentral =иdeviation =со средним и стандартным отклонением по умолчанию. Проверьте функцию с помощьюn = 3, медианой и медианным абсолютным отклонением.
sum(check_outliers(pbcdt$chol, n = 3, median, mad))## [1] 20
- \[s^2_{pool} = \frac {(n_1-1)s^2_1 + (n_2-1)s^2_2} {(n_1 - 1) + (n_2 -1)}\]