Динамическая вставка таблиц в RMarkdown
Допустим у вас есть большой дата фрейм, в котором есть один, или несколько столбцов, позволяющий разбить данные на какие то категории по отдельным таблицам, например по отделу, региону, или другому признаку. Далее в RMarkdown вам необходимо каждую подтаблицу напечатать отдельно, при этом количество этих категорий может меняться, ниже я покажу один из способов сделать это.
Изначально вам необходимо с помощью функции
split()
разбить основную таблицу, на подтаблицы, о том как это сделать я уже
рассказывал.
Теперь для того, что бы каждую подтаблицу вывести в RMarkdown как отдельную таблицу необходимо пройтись по списку подтаблиц, например с помощью функции
purrr:walk()
, и вывести по очереди их на печать.
Ниже небольшой пример кода, как это можно сделать:
library(knitr)
library(kableExtra)
library(purrr)
# разбиваем большую таблицу на список подтаблиц
df_list <- split(df, df$type)
# печатаем по очереди каждую из подтаблиц
purrr::walk(names(df_list), ~{
cat(
knitr::kable(df_list[[.x]], caption = paste("Таблица для типа:", .x), format = "html") %>%
kableExtra::kable_styling(full_width = FALSE) %>%
as.character()
)
cat("\n\n") # Добавляем пустые строки между таблицами
})
Этот код делает следующее:
1. Разбивает таблицу
df
на список подтаблиц;
2. Использует
purrr::walk()
для итерации по именам подтаблиц в нашем списке;
3. Создает HTML-таблицу для каждой подтаблицы с помощью
kable()
;
4. Добавляет стили с
kable_styling()
5. Выводит каждую таблицу в документ с помощью
cat()
6. Добавляет пустые строки между таблицами для лучшей читаемости.
Надеюсь, этот подход будет полезен в вашей работе с RMarkdown. Если у вас возникнут вопросы или вы захотите поделиться своими методами работы с данными, пишите в комментариях!
#заметки_по_R