linelist %>%
group_by(hospital) %>% # группируем строки по больницам
slice_max(date, n = 1, with_ties = F) # если равенство (даты), взять первую строку1 Редакционные и технические замечания
На этой странице мы описываем философский подход, стиль и конкретные редакционные решения, принятые при создании данного справочника.
1.1 R для прикладной эпидемиологии и общественного здравоохранения
Задача: Служит кратким справочником по R (онлайн и офлайн) с примерами, ориентированными на задачи, которые направлены на часто встречающиеся проблемы в эпидемиологии.
Как пользоваться этим руководством
- Просматривайте страницы в Содержании, либо используйте поле поиска
- Кликните на икноки “копировать”, чтобы скопировать код
- Вы можете работать параллельно с помощью примера данных
Оффлайн версия
См. инструкции на странице Скачивание руководства и данных.
1.2 Подход и стиль
Потенциальная аудитория этой книги обширна. Ею наверняка будут пользоваться как новички в R, так и опытные пользователи R, ищущие лучшие практики и советы. Поэтому книга должна быть одновременно доступной и лаконичной. Следовательно, мы будем предоставлять минимальные необходимые текстовые пояснения, чтобы применить код мог новичок и понимал, что делает код.
Еще несколько моментов:
- Это справочная книга по коду, сопровождаемая относительно короткими примерами, а не подробный учебник по R или науке о данных
- Это Руководство по R для использования в рамках прикладной эпидемиологии - а не учебник о методах или науке прикладной эпидемиологии
- Это меняющийся документ - оптимальные пакеты R для конкретной задачи часто меняются, и мы приветствуем обсуждение о том, что стоит осветить в данном руководстве
Пакеты R
Такой большой выбор
Одним из наиболее сложных аспектов изучения языка R является определение того, какой пакет R следует использовать для решения той или иной задачи. Часто случается так, что с трудом справляешься с задачей, а потом понимаешь - эй, есть пакет R, который делает все это в одной командной строке!
В данном руководстве мы стараемся предложить Вам как минимум два способа решения каждой задачи: один проверенный метод (возможно, в базовом R или tidyverse) и один специальный пакет R, созданный специально для этой цели. Мы хотим, чтобы у вас было несколько вариантов на случай, если вы не сможете загрузить данный пакет или он не подойдет вам по каким-либо другим причинам.
При выборе пакетов для использования мы отдавали предпочтение пакетам и подходам R, которые были протестированы и проверены сообществом, минимизируют количество пакетов, используемых в типичной рабочей сессии, являются стабильными (не меняются очень часто) и решают поставленную задачу просто и чисто.
В данном руководстве приоритет отдается пакетам и функциям R из tidyverse. Tidyverse - это набор пакетов R, предназначенных для работы с данными и имеющих общую грамматику и структуры данных. Все пакеты tidyverse могут быть установлены или загружены с помощью пакета tidyverse. Более подробно читайте на веб-сайте tidyverse.
При необходимости мы также предлагаем варианты кода с использованием базового R - пакетов и функций, поставляемых вместе с R при установке. Мы понимаем, что у некоторых читателей этой книги может не быть надежного Интернета для загрузки дополнительных пакетов.
Связывание функций с пакетами в явной форме
В учебниках по R часто бывает неприятно, когда функция показана в коде, но вы не знаете, из какого она пакета! Мы стараемся избежать такой ситуации.
В описательном тексте имена пакетов выделяются жирным шрифтом (например, dplyr), а функции записываются следующим образом: mutate(). Мы стараемся явно указывать, из какого пакета происходит та или иная функция, либо ссылаясь на пакет в соседнем тексте, либо явно указывая пакет в коде, например, так: dplyr::mutate(). Это может выглядеть излишним, но мы это делаем специально.
См. страницу Основы R для информации о пакетах и функциях.
Стиль кода
В руководстве мы часто используем “новые строки”, чтобы наш код выглядел “длинным”. Мы это делаем по нескольким причинам:
- Мы можем написать пояснительные комментарии с помощью
#, которые будут находиться рядом с каждой частью кода
- Как правило, длинный (вертикальный) код легче читать
- Его легче читать на узком экране (не надо пролистывать вбок)
- С отступами легче понять, какой аргумент относится к какой функции
В результате код, который мог бы быть записан так:
…записывается так:
linelist %>%
group_by(hospital) %>% # группируем строки по больницам
slice_max(
date, # сохранить строку на группу с максимальным значением даты
n = 1, # сохранить только одну самую верхнюю строку
with_ties = F) # если равенство (даты), взять первую строкуНа R-код, как правило, не влияют новые строки и отступы. При написании кода, если инициировать новую строку после запятой, то будет применена автоматическая схема отступов.
Мы также используем пробелы (например, n = 1 вместо n=1), поскольку так легче читать. Будьте дружелюбны к людям, которые читают ваш код!
Номенклатура
В этом руководстве мы как правило используем понятия “столбцы” и “строки” вместо “переменных” и “наблюдений”. Как объясняется в этом материале по “аккуратным данным”, большинство эпидемиологических статистических наборов данных структурно состоят из строк, столбцов и значений.
Переменные содержат значения, которые измеряют одинаковый базовый атрибут (например, возрастная группа, исход или дата возникновения симпмтомов). Наблюдения содержат все значения, измеренные для одной единицы (например, человека, места или лабораторного образца). Так что эти аспекты может быть сложнее определить.
В “аккуратных” наборах данных каждый столбец - это переменная, каждая строка - это наблюдение, а каждая ячейка - это одно значение. Однако некоторые наборы данных, с которыми вы столкнетесь, не будут соответствовать этому шаблону - в наборе данных “широкого” формата переменная может быть разбита на несколько столбцов (см. пример на странице Поворот данных). Аналогичным образом, наблюдения могут быть разбиты на несколько строк.
Большая часть этого справочника посвящена управлению и преобразованию данных, поэтому ссылки на конкретные структуры данных - строки и столбцы - более уместны, чем на более абстрактные наблюдения и переменные. Исключение составляют страницы, посвященные анализу данных, где можно встретить больше упоминаний о переменных и наблюдениях.
Примечания
Вот несколько типов примечаний, которые вы можете встретить в руководстве:
ПРИМЕЧАНИЕ: Это примечание.
СОВЕТ: Это совет.
ВНИМАНИЕ: Это предупредительное замечание.
ВНИМАНИЕ: Это предупреждение.
1.3 Редакционные решения
Ниже мы приводим основные редакционные решения, связанные с выбором пакетов и функций. Если вы не согласны или хотите предложить новый инструмент для рассмотрения, пожалуйста, присоединяйтесь к обсуждению на нашей странице Github.
Таблица пакетов, функций и других редакционных решений
| Тема | Рассматривали | Решение | Краткое обоснование |
|---|---|---|---|
| Общий подход к кодированию | tidyverse, data.table, base | tidyverse, со страницей о data.table, а также упоминаниями базовых альтернатив для читателей без интернета | tidyverseчитаемость, универсальность, чаще всего изучается |
| Загрузка пакетов |
library(),install.packages(), require(), pacman
|
pacman | Сокращает и упрощает код для большинства установок/применения нескольких пакетов |
| Импорт и экспорт | rio, многие другие пакеты | rio | Простота для многих типов файлов |
| Группирование для сводной статистики |
dplyr group_by(), stats aggregate()
|
dplyr group_by()
|
Соответствует фокусу на tidyverse |
| Поворот | tidyr (функции поворота), reshape2 (расплав/изготовление), tidyr (растягивание/сбор) | tidyr (функции поворота) | reshape2 вышел из употребления, tidyr использует функции поворота с версии v1.0.0 |
| Чистые имена столбцов | linelist, janitor | janitor | Подчеркивается консолидация пакетов |
| Эпиднедели | lubridate, aweek, tsibble, zoo | lubridate в целом, другие для конкретных случаев | гибкость lubridate, последовательность, перспективы поддержки пакета |
| Подписи ggplot |
labs(), ggtitle()/ylab()/xlab()
|
labs() |
все подписи в одном месте, простота |
| Конвертация в фактор |
factor(), forcats
|
forcats | разные функции также конвертируют в фактор в той же команде |
| Эпидемические кривые | incidence, ggplot2, EpiCurve | incidence2 как быстрый, ggplot2 как детальный | надежность |
| Конкатенация |
paste(), paste0(), str_glue(), glue()
|
str_glue() |
Более простой синтаксис, чем функции paste; внутри stringr |
1.4 Основные пересмотры
| Дата | Основные изменения |
|---|---|
| 10 мая 2021 | Выпуск версии 1.0.0 |
| 20 ноя 2022 | Выпуск версии 1.0.1 |
НОВОСТИ В версии 1.0.1 были внесены следующие изменения:
- Обновление до версии R 4.2
- Вычистка данных: переход от {linelist} к {matchmaker}, удалили лишнюю строку из примера
case_when()
- Даты: поменяли {linelist}
guess_date()на {parsedate}parse_date() - Поворот: небольшое обновление в
pivot_wider()id_cols=
- Анализ опросов: поменяли
plot_age_pyramid()наage_pyramid(), небольшое изменение кода аллювиального графика
- Тепловые графики: добавили
ungroup()во фрагментagg_weeks
- Интерактивные графики: добавили
ungroup()во фрагмент, который создаетagg_weeks, чтобыexpand()работала как надо
- Временные ряды: добавили
data.frame()вокруг объектов внутри всех командtrending::fit()иpredict()
- Анализ комбинаций: поменяли
case_when()наifelse()и добавили опциональный код для подготовки данныхacross()
- Цепочки распространения: Обновление до более свежей версии {epicontacts}
1.5 Благодарности
Данное руководство подготовлено независимой группой эпидемиологов со всего мира на основе опыта работы с организациями, включая местные, государственные, провинциальные и национальные органы здравоохранения, Всемирную организацию здравоохранения (ВОЗ), организацию “Врачи без границ” (MSF), больничные системы и академические институты.
Настоящее руководство не является одобренным продуктом какой-то отдельной организации. Хотя мы стремимся обеспечить правильность, мы не предоставляем гарантий касательно содержания этой книги.
Участвовали в подготовке
Редактор: Neale Batra
Авторы: Neale Batra, Alex Spina, Paula Blomquist, Finlay Campbell, Henry Laurenson-Schafer, Isaac Florence, Natalie Fischer, Aminata Ndiaye, Liza Coyer, Jonathan Polonsky, Yurie Izawa, Chris Bailey, Daniel Molling, Isha Berry, Emma Buajitti, Mathilde Mousset, Sara Hollis, Wen Lin
Рецензенты и лица, оказавшие поддержку: Pat Keating, Amrish Baidjoe, Annick Lenglet, Margot Charette, Danielly Xavier, Marie-Amélie Degail Chabrat, Esther Kukielka, Michelle Sloan, Aybüke Koyuncu, Rachel Burke, Kate Kelsey, Berhe Etsay, John Rossow, Mackenzie Zendt, James Wright, Laura Haskins, Flavio Finger, Tim Taylor, Jae Hyoung Tim Lee, Brianna Bradley, Wayne Enanoria, Manual Albela Miranda, Molly Mantus, Pattama Ulrich, Joseph Timothy, Adam Vaughan, Olivia Varsaneux, Lionel Monteiro, Joao Muianga
Иллюстрации: Calder Fong
Финансирование и поддержка
Настоящее руководства является проектом преимущественно на добровольной основе, на создание которого ушли тысячи часов.
Руководство получало некоторое поддерживающее финансирование через грант по наращиванию потенциала в контексте COVID-19 от TEPHINET, глобальной сети Программ обучения прикладных эпидемиологов (FETP).
Административную поддержку предоставила сеть выпускников EPIET (EAN), особая благодарность выражается Аннике Уендланд. EPIET - европейская программа обучения интервенционной эпидемиологии.
Особая благодарность организации Врачи без границ (MSF), Операционному центру в Амстердами (OCA) за поддержку в разработке настоящего руководства.
Данная публикация была поддержана Соглашением о сотрудничестве номер NU2GGH001873, финансируемым Центрами по контролю и профилактике заболеваний через TEPHINET, программой Рабочей группы по глобальному здоровью (Task Force for Global Health). Ответственность за содержание публикации лежит исключительно на авторах, и оно не обязательно отражает официальную точку зрения Центров по контролю и профилактике заболеваний, Министерства здравоохранения и социальных служб, Task Force for Global Health, Inc. или TEPHINET.
Вдохновение
На соответствующих страницах делаются отсылки на ряд самоучителей и виньеток, которые представили информацию для разработки содержания руководства.
В целом, источниками вдохновения для настоящего руководства были:
Проект “R4Epis” (a collaboration between MSF and RECON)
R Epidemics Consortium (RECON)
Книга R for Data Science (R4DS)
bookdown: Authoring Books and Technical Documents with R Markdown
Netlify hosts this website
1.6 Условия использования и участия
Лицензия
Applied Epi Incorporated, 2021
Данная работа лицензирована Applied Epi Incorporated в рамках лицензии Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Академические курсы и программы обучения эпидемиологов могут связаться с нами по вопросам использования или адаптации этих материалов (email contact@appliedepi.org).
Цитирование
Участие
Если вы хотите внести свой вклад в разработку содержания, сначала свяжитесь с нами через Github issues или по электронной почте. Мы разрабатываем график обновлений и создаем руководство для разработчиков.
Обратите внимание, что проект epiRhandbook разрабатывается на основе Кодекса поведения участников. Принимая участие в разработке, вы соглашаетесь с этими условиями.
1.7 Информация о сессии (R, RStudio, пакеты)
Ниже приведена информация о версиях R, RStudio и пакетов R, использованных при составлении данного Руководства.
sessioninfo::session_info()─ Session info ───────────────────────────────────────────────────────────────
setting value
version R version 4.6.0 (2026-04-24)
os Ubuntu 26.04 LTS
system x86_64, linux-gnu
ui X11
language en_US:en
collate en_US.UTF-8
ctype en_US.UTF-8
tz Etc/UTC
date 2026-10-05
pandoc 3.7.0.2 @ /usr/bin/ (via rmarkdown)
quarto 1.9.38 @ /usr/local/bin/quarto
─ Packages ───────────────────────────────────────────────────────────────────
package * version date (UTC) lib source
cli 3.6.6 2026-04-09 [1] RSPM
digest 0.6.39 2025-11-19 [1] RSPM
evaluate 1.0.5 2025-08-27 [1] RSPM
fastmap 1.2.0 2024-05-15 [1] RSPM
htmltools 0.5.9 2025-12-04 [1] RSPM
htmlwidgets 1.6.4 2023-12-06 [1] RSPM
jsonlite 2.0.0 2025-03-27 [1] RSPM
knitr 1.51 2025-12-20 [1] RSPM
otel 0.2.0 2025-08-29 [1] RSPM
rlang 1.2.0 2026-04-06 [1] RSPM
rmarkdown 2.31 2026-03-26 [1] RSPM
sessioninfo 1.2.4 2026-06-04 [1] RSPM
xfun 0.59 2026-06-19 [1] RSPM
yaml 2.3.12 2025-12-10 [1] RSPM
[1] /opt/R/4.6.0/lib/R/library
──────────────────────────────────────────────────────────────────────────────
