Как настроить метки в таблице, созданной с помощью R kableExtra :: add_header_above? - PullRequest
3 голосов
/ 23 сентября 2019

Как я могу (или могу) настроить метки в таблице, созданной с помощью kableExtra::add_header_above()?Небольшой пример:

library(knitr)
library(dplyr)
library(tidyr)
library(kableExtra)

df <- tibble(year = c(2017, 2018, 2017, 2018),
         major_item = "M",
         sub_item = c( "A", "A", "B", "B"),
         n = c( 1:4))
df %>%
  filter(sub_item == "A") %>%
  select(-sub_item) %>%
  spread(year,n) %>%
  # now join with the part for which sub_item == "B"
  left_join(df %>%
               filter(sub_item == "B") %>%
               select(-sub_item) %>%
               spread(year,n),
            by = c("major_item" = "major_item"))  %>%
  # now the nice header
  kable("latex", booktabs = T) %>%
  kable_styling() %>% 
  add_header_above(c(" " = 1, "A" = 2, "B" = 2))

Результат:

enter image description here

Конечно, суффикс .x появляется, потому что есть столбцы сто же имя, которое не допускается в одном наборе.Что я могу сделать, чтобы 2017.x и 2018.x были такими же, как другие столбцы 2017 и 2018?Любые советы о том, как получить таблицу результатов за меньшее количество шагов, также приветствуются.Спасибо!

Обновление 2019_09_26: Благодаря pivot_wider я нашел элегантный способ структурирования таблицы, а благодаря iago у него есть нужные имена столбцов:

df %>%
# the table structure
pivot_wider(names_from = c(year, sub_item),
            values_from = n) %>%
# the nice headings
kable("latex", booktabs = T,
      col.names = c("", "2017", "2018", "2017", "2018")) %>%
kable_styling() %>% 
add_header_above(c(" " = 1, "A" = 2, "B" = 2))

1 Ответ

2 голосов
/ 23 сентября 2019

Я бы сделал:

library(knitr)
library(dplyr)
library(tidyr)
library(kableExtra)

df <- tibble(year = c(2017, 2018, 2017, 2018),
         major_item = "M",
         sub_item = c( "A", "A", "B", "B"),
         n = c( 1:4))

df %>%
  filter(sub_item == "A") %>%
  select(-sub_item) %>%
  spread(year,n) %>%
  # now join with the part for which sub_item == "B"
  left_join(df %>%
               filter(sub_item == "B") %>%
               select(-sub_item) %>%
               spread(year,n),
            by = c("major_item" = "major_item"))  %>%
  # now the nice header
  kable("latex", booktabs = T, col.names = c("major_item","2017","2018","2017","2018")) %>%
  kable_styling() %>% 
  add_header_above(c(" " = 1, "A" = 2, "B" = 2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...