Как переместить общую сводку в соответствии с переменным столбцом?

#r #gt

Вопрос:

Я использую gt пакет, и я хотел бы привести имена общих сводок в соответствие со столбцом переменных. Следующий пример показывает, что я пытаюсь сделать:

 library(dplyr)
library(gt)

df <- tibble(names = c("x", "y"),
             a = c(1, 2),
             b = c(3, 4))

tbl <- df %>% 
  gt() %>% 
  grand_summary_rows(
    columns = where(is.numeric),
    fns = list(Total = ~sum(.)),
    formatter = fmt_integer
  )

tbl
 

Я хочу, чтобы «Всего» было указано в столбце «Имена», как показано здесь:

вывод таблицы

Как я могу это сделать, используя gt только?

Ответ №1:

Это не лучшее решение, но вот способ сделать это:

   df %>% 
  janitor::adorn_totals() %>% 
  gt()  
 

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

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

1. Это полезно, но я стараюсь избегать подключения другой библиотеки. Отредактирует вопрос, чтобы отразить это.

Ответ №2:

Поскольку вы хотите использовать только gt() возможность использовать переменную names в качестве группы:

 df %>% 
  gt(groupname_col = "names")  %>% 
  grand_summary_rows(
    columns = where(is.numeric),
    fns = list(Total = ~sum(.))
  )
 

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

* formatter = fmt_integer выдал мне ошибку, поэтому я удалил

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

1. Спасибо, но это не идеально, так как теперь x и y находятся в разных строках от их значений. (В моем фактическом случае использования гораздо больше строк, поэтому этот макет был бы довольно громоздким.)

2. Я вижу, к сожалению, это было единственное решение, которое я мог придумать. Давайте посмотрим, придет ли кто-нибудь с решением

Ответ №3:

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

 library(dplyr)
library(gt)

bind_rows(df, 
df %>%
  summarise(across(where(is.numeric), sum)) %>%
  mutate(names = 'Total')) %>%
  gt()
 

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

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

1. Спасибо-это творческое решение. Однако, как указано в пересмотренном вопросе, я пытаюсь сделать это gt только с помощью функций. Фактический вариант использования включает вызовы функций tab_spanner и cols_label для столбцов a и b, поэтому я не могу просто вызвать базовый фрейм данных.