class: center, middle, inverse, title-slide # Язык R и его применение в биоинформатике ### Анастасия Жарикова ### 03.09.2021 --- # Преподаватели - Жарикова Анастасия Александровна - *azharikova89@gmail.com* - Пензар Дмитрий Дмитриевич - *dmitrypenzar1996@gmail.com* - Валяева Анна Александровна - *valyaeva.ann@gmail.com* ## Где нас найти - Ходите на занятия - Чат ТГ "ФББ набор 2019, Алгоритмы и R" - Комната 633, корпус Б --- # Правила игры - Занятия очные - Ходить можно только со своей группой (или поменяться) - Презентации, домашние задания, дедлайны, ведомость и прочие материалы - на странице курса на kodomo - Структура: + 16 занятий + 10 квизов + 12 домашних заданий + 2 контрольные работы + защита проекта - В курсе будут задачи и вопросы, касающиеся других предметов (например, статистика, молекулярная биология). Считается, что все предметы из прошлых семестров вы усвоили - Сохраняйте коды домашних заданий, контрольных работ, квизов, проекта до получения зачета - Задавайте вопросы: на занятии, после занятия, письмами на почту, в телеграмм (групповой чат или в личных сообщениях) --- # Правила игры - Квизы - короткие задания на 10-15 минут в начале занятия, обязательно прилагать код - Квизы и контрольные работы не переписываются - В случае пропуска по уважительной причине (справка в учебной части, поездка на конференцию) баллы пересчитываем - Домашние задания являются обязательными - На выполнение домашнего задания отводится не менее 14 дней - После дедлайна домашние задания не принимаются ни в каком виде - Если не ясна формулировка - спрашивайте! - Сдавать домашние задания можно 1 раз только в виде отчета .pdf или .html с демонстрацией кода, загружая отчет в соответствующую форму - Домашние задания нужно присылать на почту преподавателя --- # Правила игры - Задание №0 в каждом домашнем задании - проработать самостоятельно материалы лекции! - При написании кода необходимо использовать полученные знания. При сдаче работающего, но плохого или заведомо неоптимального кода - штраф до 30% от веса задачи - При решении задания, требующего ответа, ответ должен быть сформулирован в явном виде. В противном случае задание не засчитывается - Если в задании требуется прислать файл, то называть его следует по принципу: FBB_R_HW2_Petrov.R (.html,.pdf,...) - Для защиты проекта можно использовать свои данные (предварительно показать преподавателю) или запросить датасет. Утвердить датасеты для проекта необходимо не позднее 3 декабря --- # Почему R? - Бесплатный - Форумы, поддержка, развитие - Быстрая и удобная статистическая обработка данных - Построение красивых графиков - Множество дополнительных пакетов - Обработка данных RNA-seq - Создание отчетов - Некоторые лаборатории используют только R - Еще один инструмент в вашем арсенале --- # Что будет <img src="img/struct.png" width="100%" style="display: block; margin: auto;" /> --- # R и RStudio - Демонстрация - Язык R - https://cloud.r-project.org/ - RStudio - https://rstudio.com/ ## Где работать? - Можно поставить себе на компьютер - RStudio на kodomo: https://kodomo.fbb.msu.ru/rstudio/ <img src="img/RStudio.png" width="50%" style="display: block; margin: auto;" /> --- # R - рекомендации к работе - Можно запускать без RStudio - Можно запускать из командной строки - RStudio - настоятельно рекомендуется (особенно на контрольных работах!) - Организуйте свою работу: + Проект + Скрипты file.R + Отчеты file.Rmd - Сохраняйте свой код в виде скриптов file.R (на контрольных работах - это обязательное требование) или file.Rmd - Сохраняйте полученные таблицы и графики в отдельные файлы - Использовать Google можно и нужно! --- # Markdown В RStudio: File -> New File -> R Markdown -> пример документа Запускается целиком, сразу видны ошибки и проблемы Фрагменты кода записывают в “chunk”: <img src="img/chunk.png" width="80%" style="display: block; margin: auto;" /> Переменные и функции, инициализированные в одном chunk, будут работать во всем документе --- # Markdown <img src="img/markdown.PNG" width="80%" style="display: block; margin: auto;" /> --- # Markdown В случае ошибки в коде итоговый документ не будет создан, появится сообщение об ошибке <img src="img/error.PNG" width="80%" style="display: block; margin: auto;" /> Читаем ошибку - исправляем - перезапускаем --- # Markdown
https://rmarkdown.rstudio.com/index.html https://www.rstudio.com/wp-content/uploads/2015/03/rmarkdown-reference.pdf ## Домашние задания: - делаем в markdown (file.Rmd) - сохраняем в file.html (или file.pdf) - высылаем на почту преподавателя или прикрепляем в форму --- # Оформление домашнего задания Должно быть ясно: - кто вы - номер домашнего задания - номер и формулировка задания - код - результат выполнения кода - ответ, если нужно --- # Оформление домашнего задания <img src="img/hwex.png" width="100%" style="display: block; margin: auto;" /> --- # Полезные команды
getwd() # узнать рабочую директорию setwd(‘Newdir’) # задать рабочую директорию dir() # список файлов в рабочей директории ls() # список переменных в рабочей дирректории sessionInfo() # информация о загруженной сессии R --- count: false # Основной тип данных - вектор .panel1-vec-user[ ```r *x <- 1:5 *x ``` ] .panel2-vec-user[ ``` [1] 1 2 3 4 5 ``` ] --- count: false # Основной тип данных - вектор .panel1-vec-user[ ```r x <- 1:5 x *y <- 6:10 *y ``` ] .panel2-vec-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ] --- count: false # Основной тип данных - вектор .panel1-vec-user[ ```r x <- 1:5 x y <- 6:10 y *length(x) ``` ] .panel2-vec-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 5 ``` ] <style> .panel1-vec-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> Что такое [1]? ```r vec <- 100:120 vec ``` ``` [1] 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 [20] 119 120 ``` --- count: false # Операции с векторами .panel1-vec2-user[ ```r *x <- 1:5 *x ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x *y <- 6:10 *y ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y *x + y ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y *x^2 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 *x+3 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 *-x ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x *x > 4 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x x > 4 *x == 4 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ``` [1] FALSE FALSE FALSE TRUE FALSE ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x x > 4 x == 4 *x = 4 ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ``` [1] FALSE FALSE FALSE TRUE FALSE ``` ] --- count: false # Операции с векторами .panel1-vec2-user[ ```r x <- 1:5 x y <- 6:10 y x + y x^2 x+3 -x x > 4 x == 4 x = 4 *x ``` ] .panel2-vec2-user[ ``` [1] 1 2 3 4 5 ``` ``` [1] 6 7 8 9 10 ``` ``` [1] 7 9 11 13 15 ``` ``` [1] 1 4 9 16 25 ``` ``` [1] 4 5 6 7 8 ``` ``` [1] -1 -2 -3 -4 -5 ``` ``` [1] FALSE FALSE FALSE FALSE TRUE ``` ``` [1] FALSE FALSE FALSE TRUE FALSE ``` ``` [1] 4 ``` ] <style> .panel1-vec2-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec2-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec2-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style>
--- # Операции с векторами ```r x <- 1:5 x ``` ``` [1] 1 2 3 4 5 ``` ```r y <- 1:2 y ``` ``` [1] 1 2 ``` ```r x+y ``` ``` Warning in x + y: longer object length is not a multiple of shorter object length ``` ``` [1] 2 4 4 6 6 ```
--- # Способы создания вектора
## Оператор с() ```r c(1,2,3) ``` ``` [1] 1 2 3 ``` ## Объединение ```r x <- 1:3 x ``` ``` [1] 1 2 3 ``` ```r x <- c(x,5:7) x ``` ``` [1] 1 2 3 5 6 7 ``` --- # Способы создания вектора
## Последовательности ```r 1:10 ``` ``` [1] 1 2 3 4 5 6 7 8 9 10 ``` ```r seq(from=1,to=8,by=2) ``` ``` [1] 1 3 5 7 ``` ## Повторы ```r rep(1:3,times=3) ``` ``` [1] 1 2 3 1 2 3 1 2 3 ``` --- # Способы создания вектора
## Взять 10 случайных чисел от 1 до 30 ```r sample(1:30,10,replace=T) ``` ``` [1] 13 12 7 23 30 29 24 16 13 5 ``` --- # Способы создания вектора
## Нужно сгенерировать заданное количество чисел из известного распределения - rnorm(n,mean,sd) - нормальное распределение - runif(n,min,max) - равномерное распределение - rbinom(n,size,prob) - биномиальное распределение - rpois(n,lambda) - распределение Пуассона ```r set.seed(123) rpois(20,10) ``` ``` [1] 8 9 14 10 10 15 11 5 4 13 11 11 10 8 15 11 3 7 6 8 ``` --- # Описательная статистика
```r set.seed(123) a <- rpois(20,10) sum(a) ``` ``` [1] 189 ``` ```r sd(a) ``` ``` [1] 3.410124 ``` ```r max(a) ``` ``` [1] 15 ``` ```r mean(a) ``` ``` [1] 9.45 ``` --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r *x <- c(T,F,F,T) *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) *x <- c(0.5, 1.2, 3.6) *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) *x <- 1:5 *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) *x <- c('a','b','c') *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) x <- c('a','b','c') typeof(x) *x <- c(F,1,2,T) *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ``` [1] "double" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) x <- c('a','b','c') typeof(x) x <- c(F,1,2,T) typeof(x) *x ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ``` [1] "double" ``` ``` [1] 0 1 2 1 ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) x <- c('a','b','c') typeof(x) x <- c(F,1,2,T) typeof(x) x *x <- c(1,2.8) *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ``` [1] "double" ``` ``` [1] 0 1 2 1 ``` ``` [1] "double" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) x <- c('a','b','c') typeof(x) x <- c(F,1,2,T) typeof(x) x x <- c(1,2.8) typeof(x) *x ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ``` [1] "double" ``` ``` [1] 0 1 2 1 ``` ``` [1] "double" ``` ``` [1] 1.0 2.8 ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) x <- c('a','b','c') typeof(x) x <- c(F,1,2,T) typeof(x) x x <- c(1,2.8) typeof(x) x *x <- c(1,'a',F,5.5) *typeof(x) ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ``` [1] "double" ``` ``` [1] 0 1 2 1 ``` ``` [1] "double" ``` ``` [1] 1.0 2.8 ``` ``` [1] "character" ``` ] --- count: false # Вектор - данные одного типа .panel1-vec3-user[ ```r x <- c(T,F,F,T) typeof(x) x <- c(0.5, 1.2, 3.6) typeof(x) x <- 1:5 typeof(x) x <- c('a','b','c') typeof(x) x <- c(F,1,2,T) typeof(x) x x <- c(1,2.8) typeof(x) x x <- c(1,'a',F,5.5) typeof(x) *x ``` ] .panel2-vec3-user[ ``` [1] "logical" ``` ``` [1] "double" ``` ``` [1] "integer" ``` ``` [1] "character" ``` ``` [1] "double" ``` ``` [1] 0 1 2 1 ``` ``` [1] "double" ``` ``` [1] 1.0 2.8 ``` ``` [1] "character" ``` ``` [1] "1" "a" "FALSE" "5.5" ``` ] <style> .panel1-vec3-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec3-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec3-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r *x <- c(5,16,8,32,56,2) *x ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x *x[1] ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x x[1] *x[2:4] ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ``` [1] 16 8 32 ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x x[1] x[2:4] *x[c(2,5)] ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ``` [1] 16 8 32 ``` ``` [1] 16 56 ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x x[1] x[2:4] x[c(2,5)] *x[-1] ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ``` [1] 16 8 32 ``` ``` [1] 16 56 ``` ``` [1] 16 8 32 56 2 ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x x[1] x[2:4] x[c(2,5)] x[-1] *x > 10 ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ``` [1] 16 8 32 ``` ``` [1] 16 56 ``` ``` [1] 16 8 32 56 2 ``` ``` [1] FALSE TRUE FALSE TRUE TRUE FALSE ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x x[1] x[2:4] x[c(2,5)] x[-1] x > 10 *x[x > 10] ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ``` [1] 16 8 32 ``` ``` [1] 16 56 ``` ``` [1] 16 8 32 56 2 ``` ``` [1] FALSE TRUE FALSE TRUE TRUE FALSE ``` ``` [1] 16 32 56 ``` ] --- count: false # Срезы: по индексам .panel1-vec4-user[ ```r x <- c(5,16,8,32,56,2) x x[1] x[2:4] x[c(2,5)] x[-1] x > 10 x[x > 10] *x[x >= 5 & x < 10] ``` ] .panel2-vec4-user[ ``` [1] 5 16 8 32 56 2 ``` ``` [1] 5 ``` ``` [1] 16 8 32 ``` ``` [1] 16 56 ``` ``` [1] 16 8 32 56 2 ``` ``` [1] FALSE TRUE FALSE TRUE TRUE FALSE ``` ``` [1] 16 32 56 ``` ``` [1] 5 8 ``` ] <style> .panel1-vec4-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec4-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec4-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style>
--- count: false # Справки и помощь .panel1-vec5-user[ ```r *x <- c(5,16,8,32,56,2) *typeof(x) ``` ] .panel2-vec5-user[ ``` [1] "double" ``` ] --- count: false # Справки и помощь .panel1-vec5-user[ ```r x <- c(5,16,8,32,56,2) typeof(x) *is.vector(x) ``` ] .panel2-vec5-user[ ``` [1] "double" ``` ``` [1] TRUE ``` ] --- count: false # Справки и помощь .panel1-vec5-user[ ```r x <- c(5,16,8,32,56,2) typeof(x) is.vector(x) *is.logical(x) ``` ] .panel2-vec5-user[ ``` [1] "double" ``` ``` [1] TRUE ``` ``` [1] FALSE ``` ] --- count: false # Справки и помощь .panel1-vec5-user[ ```r x <- c(5,16,8,32,56,2) typeof(x) is.vector(x) is.logical(x) *is.integer(x) ``` ] .panel2-vec5-user[ ``` [1] "double" ``` ``` [1] TRUE ``` ``` [1] FALSE ``` ``` [1] FALSE ``` ] <style> .panel1-vec5-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec5-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec5-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style>
- ?seq - help(seq) - example(seq) --- count: false # Data frame .panel1-vec6-user[ ```r *a <- c(5,4,8) *b <- c('a','b','c') *h <- c(T,F,T) *g <- c(1.5,2.5,3.7) ``` ] .panel2-vec6-user[ ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) *df <- data.frame(a,b,h) ``` ] .panel2-vec6-user[ ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) *df ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) df *df <- data.frame(a = c(5,4,8), * b = c('a','b','c'), * h = c(T,F,T), * g = c(1.5,2.5,3.7)) *df ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) df df <- data.frame(a = c(5,4,8), b = c('a','b','c'), h = c(T,F,T), g = c(1.5,2.5,3.7)) df *str(df) ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ``` 'data.frame': 3 obs. of 4 variables: $ a: num 5 4 8 $ b: Factor w/ 3 levels "a","b","c": 1 2 3 $ h: logi TRUE FALSE TRUE $ g: num 1.5 2.5 3.7 ``` ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) df df <- data.frame(a = c(5,4,8), b = c('a','b','c'), h = c(T,F,T), g = c(1.5,2.5,3.7)) df str(df) *dim(df) ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ``` 'data.frame': 3 obs. of 4 variables: $ a: num 5 4 8 $ b: Factor w/ 3 levels "a","b","c": 1 2 3 $ h: logi TRUE FALSE TRUE $ g: num 1.5 2.5 3.7 ``` ``` [1] 3 4 ``` ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) df df <- data.frame(a = c(5,4,8), b = c('a','b','c'), h = c(T,F,T), g = c(1.5,2.5,3.7)) df str(df) dim(df) *colnames(df) ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ``` 'data.frame': 3 obs. of 4 variables: $ a: num 5 4 8 $ b: Factor w/ 3 levels "a","b","c": 1 2 3 $ h: logi TRUE FALSE TRUE $ g: num 1.5 2.5 3.7 ``` ``` [1] 3 4 ``` ``` [1] "a" "b" "h" "g" ``` ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) df df <- data.frame(a = c(5,4,8), b = c('a','b','c'), h = c(T,F,T), g = c(1.5,2.5,3.7)) df str(df) dim(df) colnames(df) *rownames(df) ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ``` 'data.frame': 3 obs. of 4 variables: $ a: num 5 4 8 $ b: Factor w/ 3 levels "a","b","c": 1 2 3 $ h: logi TRUE FALSE TRUE $ g: num 1.5 2.5 3.7 ``` ``` [1] 3 4 ``` ``` [1] "a" "b" "h" "g" ``` ``` [1] "1" "2" "3" ``` ] --- count: false # Data frame .panel1-vec6-user[ ```r a <- c(5,4,8) b <- c('a','b','c') h <- c(T,F,T) g <- c(1.5,2.5,3.7) df <- data.frame(a,b,h) df df <- data.frame(a = c(5,4,8), b = c('a','b','c'), h = c(T,F,T), g = c(1.5,2.5,3.7)) df str(df) dim(df) colnames(df) rownames(df) *head(df) ``` ] .panel2-vec6-user[ ``` a b h 1 5 a TRUE 2 4 b FALSE 3 8 c TRUE ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ``` 'data.frame': 3 obs. of 4 variables: $ a: num 5 4 8 $ b: Factor w/ 3 levels "a","b","c": 1 2 3 $ h: logi TRUE FALSE TRUE $ g: num 1.5 2.5 3.7 ``` ``` [1] 3 4 ``` ``` [1] "a" "b" "h" "g" ``` ``` [1] "1" "2" "3" ``` ``` a b h g 1 5 a TRUE 1.5 2 4 b FALSE 2.5 3 8 c TRUE 3.7 ``` ] <style> .panel1-vec6-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec6-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec6-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> Сколько строк? Сколько столбцов?
--- # Встроенные наборы данных data() ?mtcars --- # mtcars
```r head(mtcars,4) ``` ``` mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ``` ```r str(mtcars) ``` ``` 'data.frame': 32 obs. of 11 variables: $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ... $ cyl : num 6 6 4 6 8 6 8 4 4 6 ... $ disp: num 160 160 108 258 360 ... $ hp : num 110 110 93 110 175 105 245 62 95 123 ... $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ... $ wt : num 2.62 2.88 2.32 3.21 3.44 ... $ qsec: num 16.5 17 18.6 19.4 17 ... $ vs : num 0 0 1 1 0 1 0 1 1 1 ... $ am : num 1 1 1 0 0 0 0 0 0 0 ... $ gear: num 4 4 4 3 3 3 3 4 4 4 ... $ carb: num 4 4 1 1 2 1 4 2 2 4 ... ``` --- # mtcars
```r colnames(mtcars) ``` ``` [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" [11] "carb" ``` ```r table(mtcars$cyl) ``` ``` 4 6 8 11 7 14 ``` --- # Data frame - Срезы
```r dim(mtcars) ``` ``` [1] 32 11 ``` ```r head(mtcars,4) ``` ``` mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 ``` ```r mtcars[3,6] ``` ``` [1] 2.32 ``` --- # Data frame - Срезы
```r mtcars[8,] ``` ``` mpg cyl disp hp drat wt qsec vs am gear carb Merc 240D 24.4 4 146.7 62 3.69 3.19 20 1 0 4 2 ``` ```r mtcars[1:3,] ``` ``` mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 ``` ```r mtcars['Mazda RX4',c('mpg','cyl')] ``` ``` mpg cyl Mazda RX4 21 6 ``` --- # Data frame - Выбор данных по условию
```r mtcars[mtcars$cyl > 4 & mtcars$cyl < 8,] ``` ``` mpg cyl disp hp drat wt qsec vs am gear carb Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4 Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4 Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6 ``` --- count: false # Data frame - Выбор данных по условию .panel1-vec7-user[ ```r *table(mtcars$cyl) ``` ] .panel2-vec7-user[ ``` 4 6 8 11 7 14 ``` ] --- count: false # Data frame - Выбор данных по условию .panel1-vec7-user[ ```r table(mtcars$cyl) *vec <- c(4,8) *vec ``` ] .panel2-vec7-user[ ``` 4 6 8 11 7 14 ``` ``` [1] 4 8 ``` ] --- count: false # Data frame - Выбор данных по условию .panel1-vec7-user[ ```r table(mtcars$cyl) vec <- c(4,8) vec *mt <- mtcars[mtcars$cyl %in% vec,] *table(mt$cyl) ``` ] .panel2-vec7-user[ ``` 4 6 8 11 7 14 ``` ``` [1] 4 8 ``` ``` 4 8 11 14 ``` ] --- count: false # Data frame - Выбор данных по условию .panel1-vec7-user[ ```r table(mtcars$cyl) vec <- c(4,8) vec mt <- mtcars[mtcars$cyl %in% vec,] table(mt$cyl) *mt <- mtcars[!(mtcars$cyl %in% vec),] *table(mt$cyl) ``` ] .panel2-vec7-user[ ``` 4 6 8 11 7 14 ``` ``` [1] 4 8 ``` ``` 4 8 11 14 ``` ``` 6 7 ``` ] <style> .panel1-vec7-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec7-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec7-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style>