Для этого можно использовать tableHTML
.
Пример данных
df <- structure(list(X2014 = c(10L, 101L, 111L), X2015 = c(20L, 202L,
212L), X2016 = c(30L, 303L, 313L), X2017 = c(40L, 404L, 414L),
X2018 = c(50L, 505L, 515L), X2019 = c(50L, 506L, 516L), X2014.1 = c(12L,
112L, 122L), X2015.1 = c(18L, 118L, 128L), X2016.1 = c(41L,
141L, 132L), X2017.1 = c(60L, 160L, 151L), X2018.1 = c(55L,
155L, 170L), X2019.1 = c(-2L, -11L, -11L), X2014.2 = c(2L,
84L, 84L), X2015.2 = c(-11L, 162L, 181L), X2016.2 = c(-20L,
244L, 263L), X2017.2 = c(-5L, 350L, 345L), X2018.2 = c(52L,
517L, 527L), X2019.2 = c(10L, 28L, 38L)), .Names = c("X2014",
"X2015", "X2016", "X2017", "X2018", "X2019", "X2014.1", "X2015.1",
"X2016.1", "X2017.1", "X2018.1", "X2019.1", "X2014.2", "X2015.2",
"X2016.2", "X2017.2", "X2018.2", "X2019.2"), class = "data.frame", row.names = c("W1",
"W2", "W3"))
Базовое решение
настроить ваши динамические входы следующим образом:
years
- это годы, которые у вас есть в вашем фрейме данных (Примечание: если у вас была структура данных, которая позволяла бы дублировать имена столбцов, вы также можете использовать unique(names(df))
, чтобы получить тот же результат).num_years
считает их, чтобы вы могли изменить входы.num_cols
- это число столбцов объекта tableHTML
.
years <- 2014:2019
num_years <- length(years)
num_cols <- 1 + num_years * 3
library(tableHTML)
Это создаст tableHTML
, где год будет заголовком, а метки - вторыми заголовками над заголовками.
df %>%
tableHTML(headers = rep(years, 3),
second_headers = list(c(1, rep(num_years, 3)),
c("", "Production", "Forecast", "Difference")),
widths = rep(100, num_cols))
Результат выглядит следующим образом:
Добавить CSS для форматирования таблицы:
Youможно использовать семейство функций add_css _ * для стилизации tableHTML
:
df %>%
tableHTML(headers = rep(years, 3),
second_headers = list(c(1, rep(num_years, 3)),
c("", "Production", "Forecast", "Difference")),
widths = rep(100, num_cols)) %>%
add_css_header(css = list("background-color",
"gray"),
headers = 1:num_cols) %>%
add_css_second_header(css = list("background-color",
"gray"),
second_headers = 1:num_cols) %>%
add_css_row(css = list("background-color",
"darkgray"),
rows = 4) %>%
add_css_row(css = list("background-color",
"lightgray"),
rows = c(3, 5))
Результат будет: