tidyverse
и регулярные выраженияВсе операции, связанные с обработкой данных (добавление столбцов, фильтрация строк и прочее), должны выполняться средствами библиотеки tidyverse
.
Загрузите данные из файла Characters.csv
, считая, что разделителем столбцов является точка с запятой и что текстовые столбцы должны считываться как строковые, а не как факторные. Сохраните их в датафрейм.
dat <- read.csv("https://allatambov.github.io/rprog/data/Characters.csv",
sep = ";", stringsAsFactors = FALSE)
Добавьте в датафрейм столбец Side
со значениями Good
и Bad
, считая, что:
Good
присваивается герою в случае, если в Loyalty
у него есть слово “Order” или “Hogwarts”;Bad
— иначе.library(tidyverse)
dat <- dat %>% mutate(Side = ifelse(str_detect(Loyalty, "Order") |
str_detect(Loyalty, "Hogwarts"),
"Good", "Bad"))
Используя критерий хи-квадрат, проверьте, правда ли есть связь между факультетом, на котором учился герой и тем, на чьей стороне он был (столбцы House
и Loyalty
соответственно).
chisq.test(dat$House, dat$Side)
## Warning in chisq.test(dat$House, dat$Side): Chi-squared approximation may be
## incorrect
##
## Pearson's Chi-squared test
##
## data: dat$House and dat$Side
## X-squared = 55.146, df = 6, p-value = 4.331e-10
Добавьте в датафрейм числовой столбец Wand.length
, который содержит длину волшебной палочки героя.
Подсказка: необходимо извлечь числа из столбца Wand
(там, где они есть).
dat <- dat %>% mutate(Wand.length = as.numeric(str_extract(Wand, "\\d+")))
Добавьте в датафрейм числовой столбец Birth.year
, который содержит год рождения героя.
Подсказка: необходимо извлечь числа из столбца Birth
(там, где они есть).
dat <- dat %>% mutate(Birth.year = as.integer(str_extract(Birth, "\\d{4}")))
Добавьте в датафрейм числовой столбец End.year
, который содержит следующие значения:
Death
, если герой умер (если соответствующая дата заполнена);Подсказка: можно сначала извлечь годы из столбца Death
, а потом на месте пропущенных значений (случаи, где годы не нашлись) поставить 2019. Для заполнения пропусков с помощью tidyverse
посмотрите на документацию к функции replace_na()
.
dat <- dat %>% mutate(End.year = as.integer(replace_na(str_extract(Death, "\\d{4}"),
2019)))
Добавьте в датафрейм числовой столбец Age
, который содержит возраст героев (для простоты считаем, что возраст героев определяется как разность между годом в End.year
и Birth.year
).
dat <- dat %>% mutate(Age = End.year - Birth.year)
Выведите на экран в отдельной вкладке строки, которые соответствуют героям старше 100 лет, упорядочив их от самого младшего до самого старшего.
dat %>% filter(Age > 100) %>% arrange %>% View
Постройте гистограмму для возраста героев, поменяйте цвет, добавьте подписи к осям. Наложите на гистограмму вертикальную линию, которая отчеркивала бы ваш возраст.
Подсказка: вертикальную линию можно добавить с помощью функции abline()
.
hist(dat$Age, col = "lightsalmon", main = "Age", xlab = "Age")
abline(v = 25, col = "firebrick",
lwd = 2, lty = 3)