Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

kableExtra: Dynamic add_header_above labeling

I would like to create a pdf with rmarkdown. The PDF should contain a table. The table should have a dynamic column label.

The tabhead should display the calendar week.

However, the calendar week (e.g., KW29) is not displayed but the variable name "kw0".

What is my error?

library(knitr)
library(kableExtra)
library(lubridate)
options(knitr.table.format = "latex")
loadData <- function() {# load some data}

myData<- loadData ()

kw0 <- paste("KW", week(Sys.Date()) - 1, sep = "")
kw1 <- paste("KW", week(Sys.Date()), sep = "")
kw2 <- paste("KW", week(Sys.Date()) + 1, sep = "")
kw3 <- paste("KW", week(Sys.Date()) + 2, sep = "")


kable(myData, row.names = FALSE, booktabs = T) %>%
  kable_styling(
  full_width = TRUE,
  font_size = 14 
  )  %>% add_header_above(header = c(" " = 1, kw0 = 2, kw1 = 2, kw2 = 2, kw3 = 2))

I am glad about your advice.

like image 569
Rene Avatar asked Jul 20 '17 06:07

Rene


1 Answers

The header is a named character vector with colspan as values.

You have to assign the names of the vector with the function names().

library(knitr)
library(kableExtra)
library(lubridate)
options(knitr.table.format = "latex")
loadData <- function() {# load some data}

myData<- loadData ()

kw0 <- paste("KW", week(Sys.Date()) - 1, sep = "")
kw1 <- paste("KW", week(Sys.Date()), sep = "")
kw2 <- paste("KW", week(Sys.Date()) + 1, sep = "")
kw3 <- paste("KW", week(Sys.Date()) + 2, sep = "")

# Set a named vector for dynamic header

# create vector with colspan
myHeader <- c(" " = 2, kw0 = 2, kw1 = 2, kw2 = 2, kw3 = 2)

# set vector names 
names(myHeader) <- c(" ", kw0, kw1, kw2, kw3)

kable(myData, row.names = FALSE, booktabs = T) %>%
  kable_styling(
  full_width = TRUE,
  font_size = 14 
  )  %>% add_header_above(header = myHeader)
like image 193
Rene Avatar answered Oct 01 '22 16:10

Rene