data.Science(R)

Анализ данных, машинное обучение, и визуализация в R

Расширенное форматирование таблиц для выгрузки в Word

Выгрузка в Word

Несмотря на растущую популярность Open Source и онлайн приложений вроде Google Docs, выгрузка табличных данных в формат Microsoft Word остаётся не менее востребованной. В экосистеме R предусмотренны различные варианты интеграции с Word, каждый со своими ограничениями. Использование связки Rmarkdown и knitr для выгрузки в формат docx могло бы помочь, если бы не ограниченные базовые возможности R, которые предлагают весьма бедный инструментарий для редактирования внешнего вида таблицы. В R вы можете преобразовывать данные каким угодно образом: агрегировать столбцы и строки, выделять подгруппы, менять названия переменных и их порядок. Но, как только дело доходит до форматирования, — базовые возможности R ни в чём не могут помочь. Пакеты kableExtra и pander предоставляют возможность форматировать таблицы, но подходят для вывода лишь в html, LaTeX или Markdown Tables. Пакет FlexTable призван решить эту проблему предоставляя широкие возможности по редактированию таблиц, а пакет officeR разработан для удобной выгрузки получившихся таблиц в формат Word.

Детальное форматирование таблиц при помощи пакета Flextable

Пакет позволяет создавать и редактировать табличные данные из data.frame  объекта: вы можете поменять размер ячеек или объединить их, добавить ряд заголовков, определить формат данных в каждой ячейке и отредактировать разметку.

Функция regulartable  используется для создания объекта flextable.

Опциональный аргумент col_keys  используется для выбора необходимых граф (столбцов).
Функция tabwid  преобразует объект flextable в html виджет, необходимый для отображения таблицы в документах Rmarkdown.

Разметка

Мы можем сгруппировать ячейки как по горизонтали, так и по вертикали: для этого используются функции merge_h  и merge_v . Объединим последовательные и идентичные ячейки для переменных Species и Sepal.Width по вертикали:

Аналогично ячейки объединяются по горизонтали. Функция megre_none  отменяет объединение.

Очень полезная функция autofit  регулирует высоту и ширину ячейки в зависимости от размера текста, так, чтобы текст умещался на одной линии. Лучше применять её в последнюю очередь, так как последующие операции могут иметь свой эффект на ширину ячеек.

Форматирование

Для форматирования может быть использован ряд функций:

bg , fontsize , italic , bold , color , padding , border .

Для всех этих функций поддерживается условное форматирование. Идентификатор j  соответствует графам, а i  строкам таблицы.

part  – часть таблицы для форматирования (одна из all , body , header : для всей таблицы, прографки (тело таблицы) и заголовка соответственно).

Функция border  принимает несколько возможных аргументов для позиции границы:
border , border.top , border.bottom , border.left  и border.right .

При помощи set_formatter  можно определить функции, которые будут использоваться для форматировании данных таблицы в строки.

Управление заголовками

Изменение подписей граф осуществляется при помощи функции set_header_labels :

Добавление строки к заголовку ( add_header ) и объединение идентичных ячеек:

Выгрузка полученных таблиц в Microsoft Word средствами пакета OfficeR

Функция read_docx  создаёт объект rdocx, отображающий документ Word. При вызове без аргументов создаётся пустой документ, но вы можете указать путь к существующему документу Word (например с брендинговой шапкой) для аргумента path . Во втором случае новые элементы будут добавлены в конец документа, если иное не указано при помощи специальной серии функций типа cursor_ .

Регулировка позиции

  • cursor_begin
    помещает курсор в начало документа
  • cursor_end
    помещает курсор в конец документа
  • cursor_reach(keyword = "ключевое слово")
    помещает курсор в начало элемента, содержащего ключевое слово
  • cursor_backward
    возвращает курсор назад к предыдущему элементу
  • cursor_forward
    переносит курсор вперёд к следующему элементу
  • cursor_bookmark(id = "идентификатор закладки")
    переносит курсор к закладке, заданной при помощи body_bookmark()

Добавление и удаление элементов

Базовыми элементами в officeR являются: текст целым параграфом, таблица, изображение, разрыв страницы и т.д.
Добавить элементы можно при помощи серии функций body_add_ :

  • body_add_par
    добавляет параграф с текстом
  • body_add_img
    добавляет изображение
  • body_add_table , body_add_flextable
    добавляет таблицу в формате data.frame  или flextable
  • body_add_break
    добавляет разрыв страницы
  • body_add_toc
    добавляет содержание
  • body_add_gg
    добавляет ggplot  объект как изображение png

Большинству этих функций соответствует набор определённых стилей, передаваемых через аргумент style . Например, чтобы добавить заголовок первого уровня вы должны вызвать body_add_par("Название заголовка", style = "heading 1") . Смотрите список доступных для документа стилей при помощи styles_info .
Аргумент pos = "on"  позволяет заменить содержание элемента, указанного при помощи cursor_ .

Чтобы добавить текст или изображение внутрь существующего параграфа используйте одну из функций: slip_in_text  или slip_in_img . Элементы добавляются в начало ( pos = c("before")) или в конец параграфа ( pos = c("after")).

Функция body_remove  позволяет удалить контент, указанный при помощи cursor_ .

Теперь применим полученные знания на практике:

Функция print  формирует документ Word, указанный для аргумента target . В данном случае, в текущем рабочем каталоге будет создан файл mydoc.docx.