R: выравнивание вложенных заголовков в таблице DT - PullRequest
1 голос
/ 30 апреля 2019

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

library(DT)
library(dplyr)

### yearly breakdown

df_year <- data.frame(
  group = LETTERS[1:6],
  year = rep(2017, 6),
  A_2017 = rnorm(6),
  B_2017 = rnorm(6)
)

sketch_year = htmltools::withTags(table(class = 'display',
                                   thead(tr(
                                     th(rowspan = 2, 'Group'),
                                     lapply(unique(df_year$year),
                                            th, colspan = 2)
                                   ),

                                   tr(
                                     lapply(rep(c(
                                       'Alpha', 'Beta'
                                     ), length(unique(df_year$year))), th)
                                   ))))

DT::datatable(select(df_year, -year),
              container = sketch_year,
              rownames = FALSE,
              fillContainer = TRUE)

Однако, если я попытаюсь применить аналогичные принципы к третьему ряду, он будет смещен:

## quarterly breakdown
df_qrt <- data.frame(
  group = LETTERS[1:6],
  year = rep(2017, 6),
  Q1_2017A = rnorm(6),
  Q1_2017B = rnorm(6),
  Q2_2017A = rnorm(6),
  Q2_2017B = rnorm(6),
  Q3_2017A = rnorm(6),
  Q3_2017B = rnorm(6),
  Q4_2017A = rnorm(6),
  Q4_2017B = rnorm(6)
)

sketch_qrt = htmltools::withTags(
  table(class = 'display',
        thead(tr(
          th(rowspan = 2, 'Group'),
          lapply(unique(df_qrt$year),
                 th, colspan = 8)
        ),
        tr(
          lapply(paste0('Q', 1:4),
                 th, colspan = 2)
        ),

        tr(lapply(rep(
          c('Alpha', 'Beta'), 4
        ), th))
        ))
)

DT::datatable(select(df_qrt, -year),
              container = sketch_qrt,
              rownames = FALSE,
              fillContainer = TRUE)

Как я могу сделать это правильно?Спасибо.

1 Ответ

1 голос
/ 03 мая 2019

Выравнивание выбрасывается, в этом случае заголовок «Группа» не изменяется, чтобы охватить вновь созданную строку.

sketch <-  htmltools::withTags(
        table(class = 'display',
              thead(tr(
                th(rowspan = 3, 'Group'),
                lapply(unique(df$year),
                       th, colspan = 8)
...