class: center, middle, inverse, title-slide # Язык R и его применение в биоинформатике ### Анастасия Жарикова ### 17.09.2021 --- <style type="text/css"> body, td { font-size: 26px; } code.r{ font-size: 26px; } pre { font-size: 26px } </style> # Пакет пакетов ~~Забудьте все, чему вас учили...~~ <img src="img/tidyverse.PNG" width="100%" style="display: block; margin: auto;" /> --- # Пакеты ## Репозитории - CRAN - https://cran.r-project.org/: install.packages() - Bioconductor - https://www.bioconductor.org/ - Github - https://github.com/ --- # Пакеты ## Полезные команды - remove.packages("packagename") - удалить пакет - update.packages() - обновить все пакеты - library() - список доступных пакетов - library("packagename") - загрузить установленный пакет в текущую R сессию - vignette("packagename") - посмотреть "красивый" мануал по пакету, есть не для всех пакетов --- # Пакеты Большинство нужных пакетов уже установлено в web RStudio на kodomo! Нужно только подгрузить пакет с помощью library("packagename"). Если пакета не обнаружено - тогда устанавливайте. Установить пакет нужно один раз, но подгружать при каждом запуске рабочего сеанса. --- # tidyverse - В web RStudio на kodomo library(tidyverse) - На своем компьютере install.packages("tidyverse") library(tidyverse) https://www.tidyverse.org/ ```r tidyverse_packages() ``` ``` [1] "broom" "cli" "crayon" "dbplyr" [5] "dplyr" "dtplyr" "forcats" "googledrive" [9] "googlesheets4" "ggplot2" "haven" "hms" [13] "httr" "jsonlite" "lubridate" "magrittr" [17] "modelr" "pillar" "purrr" "readr" [21] "readxl" "reprex" "rlang" "rstudioapi" [25] "rvest" "stringr" "tibble" "tidyr" [29] "xml2" "tidyverse" ``` --- # tibble-фреймы Похоже на data.frame Ведут себя более предсказуемо и удобно При работе с данными с помощью коллекции пакетов tidyverse в большинстве случаев на выходе получается tibble-фреймы --- count: false # tibble-фреймы Создание .panel1-vec1-user[ ```r *tibble( * x = 1:5, * y = 1, * `1z b` = x^2 + y *) ``` ] .panel2-vec1-user[ ``` # A tibble: 5 × 3 x y `1z b` <int> <dbl> <dbl> 1 1 1 2 2 2 1 5 3 3 1 10 4 4 1 17 5 5 1 26 ``` ] <style> .panel1-vec1-user { color: black; width: 38.6060606060606%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel2-vec1-user { color: black; width: 59.3939393939394%; hight: 32%; float: left; padding-left: 1%; font-size: 80% } .panel3-vec1-user { color: black; width: NA%; hight: 33%; float: left; padding-left: 1%; font-size: 80% } </style> Не преобразует строки в факторы Не изменяет имена переменных Можно (но нужно ли?) использовать "недопустимые" имена столбцов Выводит информацию о размере выводимого фрейма и типе данных в столбцах Позволяет ссылаться на только что созданные переменные --- count: false # tibble-фреймы Создание .panel1-vec2-user[ ```r *tribble( * ~x,~y,~z, * "a",2,3.6, * "b",5,1.0 *) ``` ] .panel2-vec2-user[ ``` # A tibble: 2 × 3 x y z <chr> <dbl> <dbl> 1 a 2 3.6 2 b 5 1 ``` ] <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> --- # tibble-фреймы ## Создание ### Базовый фрейм ```r head(iris) ``` ``` Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa ``` --- # tibble-фреймы ## Создание ```r as_tibble(iris) ``` ``` # A tibble: 150 × 5 Sepal.Length Sepal.Width Petal.Length Petal.Width Species <dbl> <dbl> <dbl> <dbl> <fct> 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5 3.6 1.4 0.2 setosa 6 5.4 3.9 1.7 0.4 setosa 7 4.6 3.4 1.4 0.3 setosa 8 5 3.4 1.5 0.2 setosa 9 4.4 2.9 1.4 0.2 setosa 10 4.9 3.1 1.5 0.1 setosa # … with 140 more rows ``` Выведет только 10 первых строк и помещающиеся столбцы, а не "простыню" --- #dplyr https://dplyr.tidyverse.org/reference/index.html Очень много разных функций У каждой функции очень много разных опций Разберем только некоторые наиболее употребимые --- count: false # dplyr Фильтрация строк по условию - filter() .panel1-vec3-user[ ```r *nrow(starwars) ``` ] .panel2-vec3-user[ ``` [1] 87 ``` ] --- count: false # dplyr Фильтрация строк по условию - filter() .panel1-vec3-user[ ```r nrow(starwars) *a <- filter(starwars, height > 150) ``` ] .panel2-vec3-user[ ``` [1] 87 ``` ] --- count: false # dplyr Фильтрация строк по условию - filter() .panel1-vec3-user[ ```r nrow(starwars) a <- filter(starwars, height > 150) *nrow(a) ``` ] .panel2-vec3-user[ ``` [1] 87 ``` ``` [1] 69 ``` ] <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> --- # dplyr ## Фильтрация строк по условию - filter() Подключаем конвейер %>% ```r starwars %>% filter(height > 150) ``` ``` # A tibble: 69 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Luke S… 172 77 blond fair blue 19 male mascu… 2 C-3PO 167 75 NA gold yellow 112 none mascu… 3 Darth … 202 136 none white yellow 41.9 male mascu… 4 Owen L… 178 120 brown, grey light blue 52 male mascu… 5 Beru W… 165 75 brown light blue 47 fema… femin… 6 Biggs … 183 84 black light brown 24 male mascu… 7 Obi-Wa… 182 77 auburn, wh… fair blue-gray 57 male mascu… 8 Anakin… 188 84 blond fair blue 41.9 male mascu… 9 Wilhuf… 180 NA auburn, gr… fair blue 64 male mascu… 10 Chewba… 228 112 brown unknown blue 200 male mascu… # … with 59 more rows, and 5 more variables: homeworld <chr>, species <chr>, # films <list>, vehicles <list>, starships <list> ``` --- # dplyr ## Фильтрация строк по условию - filter() ```r starwars %>% filter(height > 150, mass < 100, hair_color == "blond") ``` ``` # A tibble: 2 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Luke Sky… 172 77 blond fair blue 19 male mascu… 2 Anakin S… 188 84 blond fair blue 41.9 male mascu… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` --- # dplyr ## Выбор строк по позициям - slice() ```r starwars %>% slice(10:20) ``` ``` # A tibble: 11 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Obi-Wa… 182 77 auburn, wh… fair blue-gray 57 male mascu… 2 Anakin… 188 84 blond fair blue 41.9 male mascu… 3 Wilhuf… 180 NA auburn, gr… fair blue 64 male mascu… 4 Chewba… 228 112 brown unknown blue 200 male mascu… 5 Han So… 180 80 brown fair brown 29 male mascu… 6 Greedo 173 74 NA green black 44 male mascu… 7 Jabba … 175 1358 NA green-tan… orange 600 herm… mascu… 8 Wedge … 170 77 brown fair hazel 21 male mascu… 9 Jek To… 180 110 brown fair blue NA male mascu… 10 Yoda 66 17 white green brown 896 male mascu… 11 Palpat… 170 75 grey pale yellow 82 male mascu… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` --- # dplyr ## Конвейерный подход - можно комбинировать все! ```r starwars %>% filter(height > 150, hair_color == "blond") %>% slice(1:3) ``` ``` # A tibble: 3 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Luke Sky… 172 77 blond fair blue 19 male mascu… 2 Anakin S… 188 84 blond fair blue 41.9 male mascu… 3 Finis Va… 170 NA blond fair blue 91 male mascu… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` --- # dplyr ## Выбор строк по позициям - slice() n() - число записей ```r starwars %>% slice((n()-3):n()) ``` ``` # A tibble: 4 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Poe Dam… NA NA brown light brown NA male mascu… 2 BB8 NA NA none none black NA none mascu… 3 Captain… NA NA unknown unknown unknown NA NA NA 4 Padmé A… 165 45 brown light brown 46 female femin… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` --- # dplyr ## Выбор строк по позициям - slice() ```r starwars %>% slice_head(n=5) ``` ``` # A tibble: 5 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Luke Sk… 172 77 blond fair blue 19 male mascu… 2 C-3PO 167 75 NA gold yellow 112 none mascu… 3 R2-D2 96 32 NA white, blue red 33 none mascu… 4 Darth V… 202 136 none white yellow 41.9 male mascu… 5 Leia Or… 150 49 brown light brown 19 fema… femin… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` --- # dplyr ## Выбор строк по позициям - slice() ```r set.seed(123) starwars %>% slice_sample(n=10) ``` ``` # A tibble: 10 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Qui-Go… 193 89 brown fair blue 92 male mascu… 2 Raymus… 188 79 brown light brown NA male mascu… 3 Eeth K… 171 NA black brown brown NA male mascu… 4 Han So… 180 80 brown fair brown 29 male mascu… 5 Zam We… 168 55 blonde fair, gree… yellow NA fema… femin… 6 Darth … 175 80 none red yellow 54 male mascu… 7 Kit Fi… 196 87 none green black NA male mascu… 8 Bib Fo… 180 NA none pale pink NA male mascu… 9 Poe Da… NA NA brown light brown NA male mascu… 10 Lobot 175 79 none light blue 37 male mascu… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` --- # dplyr ## Выбор колонок по имени - select() ```r starwars %>% select(name,height,mass,hair_color) ``` ``` # A tibble: 87 × 4 name height mass hair_color <chr> <int> <dbl> <chr> 1 Luke Skywalker 172 77 blond 2 C-3PO 167 75 NA 3 R2-D2 96 32 NA 4 Darth Vader 202 136 none 5 Leia Organa 150 49 brown 6 Owen Lars 178 120 brown, grey 7 Beru Whitesun lars 165 75 brown 8 R5-D4 97 32 NA 9 Biggs Darklighter 183 84 black 10 Obi-Wan Kenobi 182 77 auburn, white # … with 77 more rows ``` --- # dplyr ## Выбор колонок по имени - select() ```r starwars %>% select(name:hair_color) ``` ``` # A tibble: 87 × 4 name height mass hair_color <chr> <int> <dbl> <chr> 1 Luke Skywalker 172 77 blond 2 C-3PO 167 75 NA 3 R2-D2 96 32 NA 4 Darth Vader 202 136 none 5 Leia Organa 150 49 brown 6 Owen Lars 178 120 brown, grey 7 Beru Whitesun lars 165 75 brown 8 R5-D4 97 32 NA 9 Biggs Darklighter 183 84 black 10 Obi-Wan Kenobi 182 77 auburn, white # … with 77 more rows ``` --- # dplyr ## Выбор колонок по имени - select() ```r starwars %>% select(-(name:hair_color)) ``` ``` # A tibble: 87 × 10 skin_color eye_color birth_year sex gender homeworld species films vehicles <chr> <chr> <dbl> <chr> <chr> <chr> <chr> <lis> <list> 1 fair blue 19 male mascu… Tatooine Human <chr… <chr [2… 2 gold yellow 112 none mascu… Tatooine Droid <chr… <chr [0… 3 white, blue red 33 none mascu… Naboo Droid <chr… <chr [0… 4 white yellow 41.9 male mascu… Tatooine Human <chr… <chr [0… 5 light brown 19 female femin… Alderaan Human <chr… <chr [1… 6 light blue 52 male mascu… Tatooine Human <chr… <chr [0… 7 light blue 47 female femin… Tatooine Human <chr… <chr [0… 8 white, red red NA none mascu… Tatooine Droid <chr… <chr [0… 9 light brown 24 male mascu… Tatooine Human <chr… <chr [0… 10 fair blue-gray 57 male mascu… Stewjon Human <chr… <chr [1… # … with 77 more rows, and 1 more variable: starships <list> ``` --- # dplyr ## Выбор колонок по имени - select () ```r as_tibble(iris) %>% select(starts_with('Sepal')) ``` ``` # A tibble: 150 × 2 Sepal.Length Sepal.Width <dbl> <dbl> 1 5.1 3.5 2 4.9 3 3 4.7 3.2 4 4.6 3.1 5 5 3.6 6 5.4 3.9 7 4.6 3.4 8 5 3.4 9 4.4 2.9 10 4.9 3.1 # … with 140 more rows ``` Аналогично: starts_with(), ends_with(), matches() и contains() --- count: false # dplyr Выбрать 1 столбец и взять как вектор - pull() .panel1-vec4-user[ ```r *starwars %>% * select(name) ``` ] .panel2-vec4-user[ ``` # A tibble: 87 × 1 name <chr> 1 Luke Skywalker 2 C-3PO 3 R2-D2 4 Darth Vader 5 Leia Organa 6 Owen Lars 7 Beru Whitesun lars 8 R5-D4 9 Biggs Darklighter 10 Obi-Wan Kenobi # … with 77 more rows ``` ] --- count: false # dplyr Выбрать 1 столбец и взять как вектор - pull() .panel1-vec4-user[ ```r starwars %>% select(name) *starwars %>% * pull(name) ``` ] .panel2-vec4-user[ ``` # A tibble: 87 × 1 name <chr> 1 Luke Skywalker 2 C-3PO 3 R2-D2 4 Darth Vader 5 Leia Organa 6 Owen Lars 7 Beru Whitesun lars 8 R5-D4 9 Biggs Darklighter 10 Obi-Wan Kenobi # … with 77 more rows ``` ``` [1] "Luke Skywalker" "C-3PO" "R2-D2" [4] "Darth Vader" "Leia Organa" "Owen Lars" [7] "Beru Whitesun lars" "R5-D4" "Biggs Darklighter" [10] "Obi-Wan Kenobi" "Anakin Skywalker" "Wilhuff Tarkin" [13] "Chewbacca" "Han Solo" "Greedo" [16] "Jabba Desilijic Tiure" "Wedge Antilles" "Jek Tono Porkins" [19] "Yoda" "Palpatine" "Boba Fett" [22] "IG-88" "Bossk" "Lando Calrissian" [25] "Lobot" "Ackbar" "Mon Mothma" [28] "Arvel Crynyd" "Wicket Systri Warrick" "Nien Nunb" [31] "Qui-Gon Jinn" "Nute Gunray" "Finis Valorum" [34] "Jar Jar Binks" "Roos Tarpals" "Rugor Nass" [37] "Ric Olié" "Watto" "Sebulba" [40] "Quarsh Panaka" "Shmi Skywalker" "Darth Maul" [43] "Bib Fortuna" "Ayla Secura" "Dud Bolt" [46] "Gasgano" "Ben Quadinaros" "Mace Windu" [49] "Ki-Adi-Mundi" "Kit Fisto" "Eeth Koth" [52] "Adi Gallia" "Saesee Tiin" "Yarael Poof" [55] "Plo Koon" "Mas Amedda" "Gregar Typho" [58] "Cordé" "Cliegg Lars" "Poggle the Lesser" [61] "Luminara Unduli" "Barriss Offee" "Dormé" [64] "Dooku" "Bail Prestor Organa" "Jango Fett" [67] "Zam Wesell" "Dexter Jettster" "Lama Su" [70] "Taun We" "Jocasta Nu" "Ratts Tyerell" [73] "R4-P17" "Wat Tambor" "San Hill" [76] "Shaak Ti" "Grievous" "Tarfful" [79] "Raymus Antilles" "Sly Moore" "Tion Medon" [82] "Finn" "Rey" "Poe Dameron" [85] "BB8" "Captain Phasma" "Padmé Amidala" ``` ] <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> --- # dplyr ## Сортировка по колонкам - arrange() ```r starwars %>% arrange(name,desc(mass),hair_color) %>% slice_head(n = 3) ``` ``` # A tibble: 3 × 14 name height mass hair_color skin_color eye_color birth_year sex gender <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr> 1 Ackbar 180 83 none brown mott… orange 41 male mascu… 2 Adi Gal… 184 50 none dark blue NA fema… femin… 3 Anakin … 188 84 blond fair blue 41.9 male mascu… # … with 5 more variables: homeworld <chr>, species <chr>, films <list>, # vehicles <list>, starships <list> ``` Сначала сортируем по столбцу name по возрастанию. Потом сортируем по столбцу desc по убыванию. Потом сортируем по столбцу hair_color по возрастанию. Отсутствующие значения ВСЕГДА в конце --- # dplyr ## Подсчитать новую колонку - mutate() ```r starwars %>% select(name:hair_color) %>% mutate(HM = height*mass) ``` ``` # A tibble: 87 × 5 name height mass hair_color HM <chr> <int> <dbl> <chr> <dbl> 1 Luke Skywalker 172 77 blond 13244 2 C-3PO 167 75 NA 12525 3 R2-D2 96 32 NA 3072 4 Darth Vader 202 136 none 27472 5 Leia Organa 150 49 brown 7350 6 Owen Lars 178 120 brown, grey 21360 7 Beru Whitesun lars 165 75 brown 12375 8 R5-D4 97 32 NA 3104 9 Biggs Darklighter 183 84 black 15372 10 Obi-Wan Kenobi 182 77 auburn, white 14014 # … with 77 more rows ``` --- # dplyr ## Подсчитать новую колонку и убрать остальные - transmute() ```r starwars %>% select(name:hair_color) %>% transmute(inv_mass = 1/mass, inv_height = 1/height) ``` ``` # A tibble: 87 × 2 inv_mass inv_height <dbl> <dbl> 1 0.0130 0.00581 2 0.0133 0.00599 3 0.0312 0.0104 4 0.00735 0.00495 5 0.0204 0.00667 6 0.00833 0.00562 7 0.0133 0.00606 8 0.0312 0.0103 9 0.0119 0.00546 10 0.0130 0.00549 # … with 77 more rows ``` --- # dplyr ## Переименовать колонку - rename() ```r starwars %>% select(name:hair_color) %>% rename(NAME=name) ``` ``` # A tibble: 87 × 4 NAME height mass hair_color <chr> <int> <dbl> <chr> 1 Luke Skywalker 172 77 blond 2 C-3PO 167 75 NA 3 R2-D2 96 32 NA 4 Darth Vader 202 136 none 5 Leia Organa 150 49 brown 6 Owen Lars 178 120 brown, grey 7 Beru Whitesun lars 165 75 brown 8 R5-D4 97 32 NA 9 Biggs Darklighter 183 84 black 10 Obi-Wan Kenobi 182 77 auburn, white # … with 77 more rows ``` --- # dplyr ## Взять уникальные значения - distinct() ```r df <- tribble( ~a,~b, "a",1, "a",1, "a",2, "b",3, "b",3 ) distinct(df) ``` ``` # A tibble: 3 × 2 a b <chr> <dbl> 1 a 1 2 a 2 3 b 3 ``` --- # dplyr ## Получение групповых итогов - summarize() ```r starwars %>% summarise(mass_mean_noNA = mean(mass, na.rm=T), mass_mean_withNA = mean(mass), heihgt_max = max(height,na.rm = T), count = n()) ``` ``` # A tibble: 1 × 4 mass_mean_noNA mass_mean_withNA heihgt_max count <dbl> <dbl> <int> <int> 1 97.3 NA 264 87 ``` --- # dplyr ## Работа с группами - group_by() + summarise() ```r starwars %>% select(name:eye_color) %>% drop_na() %>% group_by(eye_color) %>% summarise(count = n(), height = max(height)) ``` ``` # A tibble: 11 × 3 eye_color count height <chr> <int> <int> 1 black 6 229 2 blue 12 234 3 blue-gray 1 182 4 brown 13 193 5 green, yellow 1 216 6 hazel 2 178 7 orange 5 224 8 red 3 200 9 unknown 2 193 10 white 1 178 11 yellow 8 202 ``` Число строк и максимальный вес подсчитаны для каждого цвета глаз отдельно --- # dplyr ## Работа с группами После применения group_by() все манипуляции будут проходить для каждой группы отдельно Если далее нужно вернуться к работе с полным набором данных, нужно разгрупировать tibble-фрейм - ungroup() --- # stringr ## Работа с строками https://stringr.tidyverse.org/ Посмотрим работу некоторых функций в связке с dplyr Тестовый набор данных: ```r SW <- starwars %>% select(name:eye_color) %>% drop_na() ``` --- # stringr ## Подсчитать длину строки - str_length() ```r SW %>% mutate(name_len = str_length(name)) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color name_len <chr> <int> <dbl> <chr> <chr> <chr> <int> 1 Luke Skywalker 172 77 blond fair blue 14 2 Darth Vader 202 136 none white yellow 11 3 Leia Organa 150 49 brown light brown 11 4 Owen Lars 178 120 brown, grey light blue 9 5 Beru Whitesun lars 165 75 brown light blue 18 6 Biggs Darklighter 183 84 black light brown 17 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray 14 8 Anakin Skywalker 188 84 blond fair blue 16 9 Chewbacca 228 112 brown unknown blue 9 10 Han Solo 180 80 brown fair brown 8 # … with 44 more rows ``` --- # stringr ## Взять подстроку - str_sub() ```r SW %>% mutate(name_start = str_sub(name,1,5)) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color name_start <chr> <int> <dbl> <chr> <chr> <chr> <chr> 1 Luke Skywalker 172 77 blond fair blue "Luke " 2 Darth Vader 202 136 none white yellow "Darth" 3 Leia Organa 150 49 brown light brown "Leia " 4 Owen Lars 178 120 brown, grey light blue "Owen " 5 Beru Whitesun lars 165 75 brown light blue "Beru " 6 Biggs Darklighter 183 84 black light brown "Biggs" 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray "Obi-W" 8 Anakin Skywalker 188 84 blond fair blue "Anaki" 9 Chewbacca 228 112 brown unknown blue "Chewb" 10 Han Solo 180 80 brown fair brown "Han S" # … with 44 more rows ``` --- # stringr ## Изменение регистра ```r SW %>% mutate(name_upper = str_to_upper(name)) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color name_upper <chr> <int> <dbl> <chr> <chr> <chr> <chr> 1 Luke Skywalker 172 77 blond fair blue LUKE SKYW… 2 Darth Vader 202 136 none white yellow DARTH VAD… 3 Leia Organa 150 49 brown light brown LEIA ORGA… 4 Owen Lars 178 120 brown, grey light blue OWEN LARS 5 Beru Whitesun lars 165 75 brown light blue BERU WHIT… 6 Biggs Darklighter 183 84 black light brown BIGGS DAR… 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray OBI-WAN K… 8 Anakin Skywalker 188 84 blond fair blue ANAKIN SK… 9 Chewbacca 228 112 brown unknown blue CHEWBACCA 10 Han Solo 180 80 brown fair brown HAN SOLO # … with 44 more rows ``` Аналогично: str_to_lower(), str_to_title() --- # stringr ## Соответствие символьного вектора шаблону - str_detect() ```r SW %>% mutate(nameL = str_detect(name,"^L")) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color nameL <chr> <int> <dbl> <chr> <chr> <chr> <lgl> 1 Luke Skywalker 172 77 blond fair blue TRUE 2 Darth Vader 202 136 none white yellow FALSE 3 Leia Organa 150 49 brown light brown TRUE 4 Owen Lars 178 120 brown, grey light blue FALSE 5 Beru Whitesun lars 165 75 brown light blue FALSE 6 Biggs Darklighter 183 84 black light brown FALSE 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray FALSE 8 Anakin Skywalker 188 84 blond fair blue FALSE 9 Chewbacca 228 112 brown unknown blue FALSE 10 Han Solo 180 80 brown fair brown FALSE # … with 44 more rows ``` Находит значения в столбце name, начинающиеся с L. "L$" - аналогично: заканчиваются на L Можно искать вхождение подстроки или паттерна --- # stringr ## Подсчет обнаруженных совпадений в строке - str_count() ```r SW %>% mutate(out = str_count(eye_color,c('l','a'))) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color out <chr> <int> <dbl> <chr> <chr> <chr> <int> 1 Luke Skywalker 172 77 blond fair blue 1 2 Darth Vader 202 136 none white yellow 0 3 Leia Organa 150 49 brown light brown 0 4 Owen Lars 178 120 brown, grey light blue 0 5 Beru Whitesun lars 165 75 brown light blue 1 6 Biggs Darklighter 183 84 black light brown 0 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray 1 8 Anakin Skywalker 188 84 blond fair blue 0 9 Chewbacca 228 112 brown unknown blue 1 10 Han Solo 180 80 brown fair brown 0 # … with 44 more rows ``` Подсчитывает сколько в каждом значении столбца eye_color букв l и a --- # stringr ## Удаляет паттерн - str_remove_all() ```r SW %>% mutate(rm = str_remove_all(eye_color, "[aeiou]")) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color rm <chr> <int> <dbl> <chr> <chr> <chr> <chr> 1 Luke Skywalker 172 77 blond fair blue bl 2 Darth Vader 202 136 none white yellow yllw 3 Leia Organa 150 49 brown light brown brwn 4 Owen Lars 178 120 brown, grey light blue bl 5 Beru Whitesun lars 165 75 brown light blue bl 6 Biggs Darklighter 183 84 black light brown brwn 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray bl-gry 8 Anakin Skywalker 188 84 blond fair blue bl 9 Chewbacca 228 112 brown unknown blue bl 10 Han Solo 180 80 brown fair brown brwn # … with 44 more rows ``` Удалили из столбца eye_color все гласные буквы str_remove() удаляет только первое вхождение --- # stringr ## Заменить паттерн - str_replace_all() ```r SW %>% mutate(rep = str_replace_all(eye_color,"[aeiou]","-")) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color rep <chr> <int> <dbl> <chr> <chr> <chr> <chr> 1 Luke Skywalker 172 77 blond fair blue bl-- 2 Darth Vader 202 136 none white yellow y-ll-w 3 Leia Organa 150 49 brown light brown br-wn 4 Owen Lars 178 120 brown, grey light blue bl-- 5 Beru Whitesun lars 165 75 brown light blue bl-- 6 Biggs Darklighter 183 84 black light brown br-wn 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray bl---gr-y 8 Anakin Skywalker 188 84 blond fair blue bl-- 9 Chewbacca 228 112 brown unknown blue bl-- 10 Han Solo 180 80 brown fair brown br-wn # … with 44 more rows ``` Заменили в столбце eye_color все гласные буквы на - str_replace() заменит только первое вхождение --- # stringr ## Взять n слов из строки - word() ```r SW %>% mutate(first = word(name,1)) ``` ``` # A tibble: 54 × 7 name height mass hair_color skin_color eye_color first <chr> <int> <dbl> <chr> <chr> <chr> <chr> 1 Luke Skywalker 172 77 blond fair blue Luke 2 Darth Vader 202 136 none white yellow Darth 3 Leia Organa 150 49 brown light brown Leia 4 Owen Lars 178 120 brown, grey light blue Owen 5 Beru Whitesun lars 165 75 brown light blue Beru 6 Biggs Darklighter 183 84 black light brown Biggs 7 Obi-Wan Kenobi 182 77 auburn, white fair blue-gray Obi-Wan 8 Anakin Skywalker 188 84 blond fair blue Anakin 9 Chewbacca 228 112 brown unknown blue Chewbacca 10 Han Solo 180 80 brown fair brown Han # … with 44 more rows ```