---
title: "Домашнее задание №6"
subtitle: "ФББ - R - 2023"
author: "Анна Валяева"
output: html_document
---

```{r setup, include=FALSE}
# Настройки для отображения графиков в документе
knitr::opts_chunk$set(fig.align = 'center', out.width='60%', dpi = 300)

# Подгрузим tidyverse
library(tidyverse)

# Задать тему ggplot для всех графиков документа (можно изменить)
theme_set(theme_minimal())
```


**Дедлайн - 22 октября 2023 23:59**

## Инструкция

При выполнении заданий используйте средства пакета tidyverse.

Обратите особое внимание на оформление домашнего задания и правила, озвученные на занятии.

Приводите весь код, который вам понадобился для получения ответа.

В файле приведены примеры графиков, которые вы должны получить в задании. Точно воспроизводить их не нужно, они нужны на случай, если вы запутаетесь в задании.

На основании заполненного .Rmd файла создайте .html файл.

Присылать заполненные .Rmd тетрадки и .html файл необходимо через [гугл-форму](https://docs.google.com/forms/d/e/1FAIpQLSecJOGNwKHx8oulMGLg-vv-x9RP9vdiKbnP09gyToOxg7m5tA/viewform?usp=sf_link){target="_blank"}.


## Задание 1

### Задание 1.1

Из набора данных `msleep` отберите столбцы, согласно следующим заданиям.

- Отберите колонку `name` и колонки, названия которых начинаются на "sleep" или оканчиваются на "wt"
- Отберите колонки с названиями из вектора `c("name", "genus", "vore", "order", "conservation")`
- Отберите все колонки, содержащие числовые значения
- Пересортируйте колонки так, чтобы в начале шли столбцы `conservation` и `sleep_total`

```{r}

```


### Задание 1.2

Ранее чтобы трансформировать за раз несколько столбцов использовались функции `mutate_all`, `mutate_at` и `mutate_if`. Сейчас их все заменяет комбинация простого mutate и функции `across`. Стоит иметь ввиду, что в таком случае столбцы модифицируются, а не создаются новые (но можно создавать и новые).

- Транформируйте все-все столбцы с помощью `tolower` - функции, которая переводит весь текст (так ли это?) в строчные буквы.
- Трансформируйте тем же образом только текстовые столбцы (characters).
- Трансформируйте столбцы, названия которых содержат слово "sleep": переведите часы в минуты.
- Создайте новые столбцы, в которых все значения, выраженные в часах будут переведены в минуты.
- Логарифмируйте все числовые значения - трансформируйте уже существующие столбцы.
- Одновременно с переводом часов в минуты, логарифмируйте все числовые значения и создайте для транформированных значений новые колонки.

```{r}

```


### Задание 1.3

Отберите строки из набора данных `msleep` по следующим запросам.

- Оставьте только те строки, в которых все строковые значения не равны `NA`.
- Оставьте только те строки, где `name`, `genus` или `order` начинаются на P.
- Найдите тех животных, у которых значения `sleep_total` и `awake` примерно равны - отличаются максимум на 1 час.

```{r}

```


### Задание 1.4

Сгруппируйте датафрейм по переменной `vore` и посчитайте средние и максимальные значения по всем числовым признакам.

```{r}

```


## Задание 2

Воспользуйтесь набором данных starwars - он доступен из пакета tidyverse. Этот набор данных содержит информацию о персонажах вселенной Звездных Войн (взглянить в справку о датасете, чтобы узнать детали).

Посчитайте в скольки фильмах появлялся каждый из персонажей, а также определите был ли он героем эпизода “Новая надежда” (A New Hope). Поскольку столбец films (а также столбцы vehicles и starships) являются не просто столбцами, а столбцами-списками (list columns), то есть представляют из себя не обычные простые вектора, а списки. Столбец films можно представить как список, в котором каждый элемент - это значение в каждой следующей строке датафрейма, и элемент этого списка является строковым вектором. Из-за такой сложной структуры столбца для работы с ним имеет смысл использовать функции семейства map (они отлично справляются со списками). Map можно (и нужно) использовать при создании новых столбцов (с информацией о количестве фильмов и т.д.) с помощью mutate.

После того, как вы справились с подсчетами, оставьте только персонажей, которые были в эпизоде “Новая надежда” и постройте график дотплот с помощью geom_point(), который бы показывал, какие персонажи разных рас (species) в скольких фильмах появлялись. По оси X - число фильмов, по Y - раса (species), каждая точка - один персонаж. Цветом точки продублируйте информацию о расе, размером точки - число фильмов. Подпишите каждую точку - добавьте на график имена персонажей.

Сделайте график понятным (подпишите названия осей, добавьте название и т.д.) и визуально приятным.

```{r}

```



## Задание 3

Скачайте данные про лемуров (lemurs.zip) - https://github.com/kirushka/datasets/raw/main/splitted%20datasets/lemurs.zip. Скачайте и разархивируйте файл в свою рабочую директорию (для этого использовать R не нужно, делайте это как вам привычнее). В папке weights лежат таблицы с 3-мя измерениями веса разных лемуров. Данные по каждому лемуру содержатся в своем файле. Прочитайте эти данные и объедините их в один датафрейм. Не потеряйте информацию об имени лемура (содержится в названии файла).

Объедините данные о весе лемуров с более обширными данными с их биографическими данными - они содержатся в файле lemur_info.csv.

С помощью линейной диаграммы изобразите изменение массы тела лемуров (отберите только тех лемуров, для которых есть данные по всем трем временным точкам измерения массы тела). Цветом линий отобразите пол животных.

Сделайте график понятным (подпишите названия осей, добавьте название и т.д.) и визуально приятным.

```{r}

```


## Задание 4

### Задание 4.1

В этом и последующих заданиях вы будете использовать датасет, полученный в результате секвенирования РНК единичных клеток. Вам понадобятся объединенная таблица с экспрессиями (каунтами) разных генов и таблица с метаданными. Эти данные можно скачать в виде zip по ссылке https://raw.githubusercontent.com/kirushka/datasets/main/scrna.zip. Разархивируйте файл в свою рабочую директорию (для этого использовать R не нужно, делайте это как вам привычнее).

Датасет состоит из нескольких частей:

- в папке counts - таблицы с экспрессией генов (таблица с каунтами) - всего 13714 гена x 600 клеток. В каждом файле данные по 100 клеткам. Столбец gene содержит символьные обозначения генов, названия остальных столбцов - это идентификаторы индивидуальных клеток.
- cells_metadata.tsv - метаданные - аннотация клеток по типам.

Создайте список фалов с таблицами с каунтами и, используя `map`, прочитайте все файлы в один датафрейм (соединяя индивидуальные датафреймы по столбцам - из 6 датафреймов размера 13714 х 101 у вас должен получиться одни датафрейм размера 13714 х 601). Старайтесь не самостоятельно задавать названия нужных файлов, а например, пользоваться функциями, которые выдают названия всех или не всех файлов в директории.

Выведите названия всех столбцов, содержащих тип данных `character`.

Если использованный вами подход привел к тому, что у вас появилось несколько дублирующихся столбцов с названиями генов, то отберите для дальнейшей работы только один столбец с именами генов и все столбцы с каунтами.

Сохраните полученный датафрейм в текстовый файл.

```{r}

```


### Задание 4.2

Прочитайте полученный в предыдущем задании датафрейм и метаданные к нему (лежат рядом с папкой `counts/`).

Используя датафрейм с метаданными о клетках, случайным образом отберите по 25 клеток каждого типа (B cells, T cells и Monocytes).

Используя подвыборку, состоящую из отобранных клеток, удалите из данных экспрессии гены, которые имеют значение 0 во всех клетках. Посчитайте среднюю экспрессию и стандартное отклонение экспрессии для каждого гена (это может занять некоторое время). Оставьте только те гены, у которых средняя экспрессия выше 0.1. Возьмите 100 генов с самой вариабельной экспрессией (высоким стандартным отклонением) и случайным образом выберите 25 генов. Сохраните полученный датафрейм в текстовый файл.

Не бойтесь разбивать это задание на несколько шагов и записывать промежуточные результаты в отдельные переменные.

В итоге у вас должен получиться датасет из 75 клеток и 25 генов.

```{r}

```


### Задание 4.3

Прочитайте датасет из 75 клеток и 25 генов, полученный в предыдущем задании. Также вам понадобятся метаданные.

Выберите 2 любых гена из вашего датасета и постройте точковую диаграмму, показывающую экспрессию этих генов в отобранных клетках. Цветом отобразите уровень экспрессии любого гена (используйте градиент) и формой точек укажите тип клеток (**cell_type**).

Для создания такого графика вам необходимо будет привести данные в нужный формат (используйте функции `pivot_longer`/`pivot_wider`) и объединить датафрейм со значениями экспрессии генов и метаданными.

Сохраните график.

```{r}

```


