гибкая группа по столбцу - PullRequest
1 голос
/ 10 апреля 2020

Я создаю отчеты через Rmarkdown, которые должны быть отображены в Word. Я надеюсь, что смогу воспроизвести этот формат таблицы:

enter image description here

Я пытался использовать flextable, чтобы сделать это без каких-либо реальных успехов. Я прочитал сайт flextable и нашел способ использовать группы для объединения строк, но не для группировки столбцов. Функция as_grouped_data () может создавать группы заранее, но можно ли использовать эти группы для заголовков столбцов?

Небольшой пример моих данных:

df = structure(list(Athlete = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 
1L, 1L, 1L, 2L, 2L, 2L), .Label = c("Athlete 1", "Athlete 2"), class = "factor"), 
    Time = structure(c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
    2L, 3L), .Label = c("1", "2", "3"), class = "factor"), Measure = structure(c(1L, 
    1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("Distance", 
    "Speed"), class = "factor"), Value = c(4.02, 11.5, 19.82, 
    3.03, 9.67, 17.9, 6.5, 8.08, 8.47, 5.3, 7.64, 8.67)), row.names = c(NA, 
-12L), class = "data.frame")
# Create table
myft = flextable(df) 
# Merge athlete coloumn
myft = merge_v(myft, j=c("Time", "Athlete"))
myft

Я застрял здесь и не знаю, как перевести эти группы из заголовков строк в заголовки столбцов.

1 Ответ

2 голосов
/ 10 апреля 2020

Чтобы создать желаемый формат для вашей таблицы, вы, вероятно, хотите, чтобы данные были «широкими». Это даст вам 2 колонки для ваших 2 спортсменов. В этом примере используется pivot_wider из tidyr.

После упорядочивания по заказу Time вы используете merge_v из flextable. Добавлено fix_border_issues для исправления нижней границы таблицы после слияния.

library(flextable)
library(tidyverse)

myft <- df %>%
  pivot_wider(id_cols = c(Time, Measure), names_from = Athlete, values_from = Value) %>%
  arrange(Time) %>%
  flextable()

# Merge Time column vertically
myft = merge_v(myft, j="Time")
myft = fix_border_issues(myft, part = "all")
myft

Выход

flextable with merged vertical column

...