使用 tableGrob 合并 Table Header 个单元格
Merging Table Header Cells Using tableGrob
我目前正在使用以下方法创建 table 图像:
SummaryTable <- data.frame(
index,
xa,
xb,
ya,
yb,
za,
zb
)
names(SummaryTable) <- c("Index",
"Main X Sub A",
"Main X Sub B",
"Main Y Sub A",
"Main Y Sub B",
"Main Z Sub A",
"Main Z Sub B")
tt <- ttheme_default(colhead=list(fg_params = list(parse=TRUE)))
tbl <- tableGrob(SummaryTable, rows=NULL, theme=tt)
grid.arrange(tbl,as.table=TRUE)
输出:
使用 dput( SummaryTable ):
structure(list(Index = 0:8, `Main X Sub A` = c(1, 0.69, 0.61,
0.56, 0.5, 0.44, 0.4, 0.36, 0.33), `Main X Sub B` = c(0.86, 0.62,
0.51, 0.42, 0.36, 0.31, 0.27, 0.24, 0.23), `Main Y Sub A` = c(1,
0.8, 0.74, 0.68, 0.63, 0.56, 0.52, 0.47, 0.43), `Main Y Sub B` = c(0.86,
0.77, 0.67, 0.59, 0.53, 0.47, 0.43, 0.39, 0.36), `Main Z Sub A` = c(0,
0.17, 0.23, 0.27, 0.33, 0.37, 0.42, 0.46, 0.49), `Main Z Sub B` = c(0,
0.24, 0.33, 0.42, 0.48, 0.55, 0.6, 0.64, 0.66)), .Names = c("Index",
"Main X Sub A", "Main X Sub B", "Main Y Sub A", "Main Y Sub B",
"Main Z Sub A", "Main Z Sub B"), row.names = c(NA, -9L), class = "data.frame")
但是,我想合并顶部 headers 以实现此输出(如 png 或 pdf):
此 table 是在 Excel 中创建的。 X、Y 和 Z 在合并的单元格内。
有没有人能够协助合并单元格的方法?
一种方法是使用 combine
(described here),将额外的 header 行添加到您的 table。
使用来自 here 的想法,您可以为额外的 header 行创建一个 tableGrob
。
然后您可以更改 gtable
的 l
和 r
以更正定位。
library(grid)
library(gridExtra)
# example data & header row
tab <- tableGrob(mtcars[1:3, 1:4], rows=NULL)
header <- tableGrob(mtcars[1, 1:2], rows=NULL, cols=c("head1", "head2"))
jn <- gtable_combine(header[1,], tab, along=2)
jn$widths <- rep(max(jn$widths), length(jn$widths)) # make column widths equal
#grid.newpage()
#grid.draw(jn) # see what it looks like before altering gtable
# change the relevant rows of gtable
jn$layout[1:4 , c("l", "r")] <- list(c(1, 3), c(2, 4))
grid.newpage()
grid.draw(jn)
我目前正在使用以下方法创建 table 图像:
SummaryTable <- data.frame(
index,
xa,
xb,
ya,
yb,
za,
zb
)
names(SummaryTable) <- c("Index",
"Main X Sub A",
"Main X Sub B",
"Main Y Sub A",
"Main Y Sub B",
"Main Z Sub A",
"Main Z Sub B")
tt <- ttheme_default(colhead=list(fg_params = list(parse=TRUE)))
tbl <- tableGrob(SummaryTable, rows=NULL, theme=tt)
grid.arrange(tbl,as.table=TRUE)
输出:
使用 dput( SummaryTable ):
structure(list(Index = 0:8, `Main X Sub A` = c(1, 0.69, 0.61,
0.56, 0.5, 0.44, 0.4, 0.36, 0.33), `Main X Sub B` = c(0.86, 0.62,
0.51, 0.42, 0.36, 0.31, 0.27, 0.24, 0.23), `Main Y Sub A` = c(1,
0.8, 0.74, 0.68, 0.63, 0.56, 0.52, 0.47, 0.43), `Main Y Sub B` = c(0.86,
0.77, 0.67, 0.59, 0.53, 0.47, 0.43, 0.39, 0.36), `Main Z Sub A` = c(0,
0.17, 0.23, 0.27, 0.33, 0.37, 0.42, 0.46, 0.49), `Main Z Sub B` = c(0,
0.24, 0.33, 0.42, 0.48, 0.55, 0.6, 0.64, 0.66)), .Names = c("Index",
"Main X Sub A", "Main X Sub B", "Main Y Sub A", "Main Y Sub B",
"Main Z Sub A", "Main Z Sub B"), row.names = c(NA, -9L), class = "data.frame")
但是,我想合并顶部 headers 以实现此输出(如 png 或 pdf):
此 table 是在 Excel 中创建的。 X、Y 和 Z 在合并的单元格内。
有没有人能够协助合并单元格的方法?
一种方法是使用 combine
(described here),将额外的 header 行添加到您的 table。
使用来自 here 的想法,您可以为额外的 header 行创建一个 tableGrob
。
然后您可以更改 gtable
的 l
和 r
以更正定位。
library(grid)
library(gridExtra)
# example data & header row
tab <- tableGrob(mtcars[1:3, 1:4], rows=NULL)
header <- tableGrob(mtcars[1, 1:2], rows=NULL, cols=c("head1", "head2"))
jn <- gtable_combine(header[1,], tab, along=2)
jn$widths <- rep(max(jn$widths), length(jn$widths)) # make column widths equal
#grid.newpage()
#grid.draw(jn) # see what it looks like before altering gtable
# change the relevant rows of gtable
jn$layout[1:4 , c("l", "r")] <- list(c(1, 3), c(2, 4))
grid.newpage()
grid.draw(jn)