гибкий: Как отображать заголовки групп только как значение, а не как имя переменной: значение

#r #row #grouping #flextable

#r #строка #группировка #гибкий

Вопрос:

 library(tidyverse)
library(flextable)
  

MWE

 tib <- tibble(var_group = c("a", "a", "b", "c", "c", "c"),
              var = 1:6)

tib <- as_grouped_data(x = tib, groups = c("var_group"), columns = NULL)

as_flextable(tib) 

  

Как я могу удалить var_group: часть сгруппированных заголовков, чтобы у меня остались a, b и c?

Это то, что я хотел бы видеть (не беспокоясь о hlines — важен текст):

Это то, что я хотел бы видеть

Не это:

сгруппированные строки по умолчанию в гибкой таблице

Комментарии:

1. Когда я пытаюсь это сделать, я получаю следующее сообщение об ошибке: «Ошибка в get_rows_id(x[[часть]], i): неверный выбор строки: длина (i) [0] != nrow(dataset) [9]»

2. Функция является as_grouped_data . Я использую последнюю версию flextable от cran: v0.5.1

3. Вы правы. Ранее я думал, что это функция tidyverse. извините

4. Вы можете попробовать flextable(tib) %>% set_header_labels(var_group = "") . Не удалось удалить строки заголовка

5. Я получаю эту ошибку: «Ошибка в [<- ( * tmp *`, i, j, значение = value): нижний индекс выходит за рамки». Меня не беспокоит отредактированный вопрос hlines, чтобы прояснить это.

Ответ №1:

Это также работает:

 library(tidyverse)
library(flextable)

tib <- tibble(var_group = c("a", "a", "b", "c", "c", "c"),
              var = 1:6)

tib <- as_grouped_data(x = tib, groups = c("var_group"), columns = NULL)

as_flextable(tib, hide_grouplabel = TRUE) 

  

Ответ №2:

Вам нужно использовать flextable::compose , чтобы иметь возможность перезаписывать значения по умолчанию. Важно посмотреть на данные, созданные as_grouped_data, которые будут использоваться. В группы были добавлены фиктивные строки, и мы можем использовать этот столбец.

 library(tidyverse)
library(flextable)
#> 
#> Attachement du package : 'flextable'
#> The following object is masked from 'package:purrr':
#> 
#>     compose

tib <- tibble(var_group = c("a", "a", "b", "c", "c", "c"),
              var = 1:6)

tib <- as_grouped_data(x = tib, groups = c("var_group"), columns = NULL)
tib
#>   var_group var
#> 1         a  NA
#> 4      <NA>   1
#> 5      <NA>   2
#> 2         b  NA
#> 6      <NA>   3
#> 3         c  NA
#> 7      <NA>   4
#> 8      <NA>   5
#> 9      <NA>   6
tib %>% 
  as_flextable( ) %>% 
  flextable::compose(
    i = ~ !is.na(var_group), # when var_group not NA
    j = "var", # on column "var"
    # create a paragraph containing a chunk containing value of `var_group`
    value = as_paragraph(as_chunk(var_group))) %>% 
  hline(i = ~ !is.na(var_group), border = officer::fp_border() ) %>% 
  autofit()
  

введите описание изображения здесь