如何将多个Kable表格以m×n网格展示?以3×2布局为例
实现Kable表格3×2网格布局的方法
直接调用kable(list(t1,t2,t3,t4,t5,t6))会让所有表格横向排列,要实现3行2列的布局,可借助kableExtra包的分组拼接功能,分两种输出场景处理:
HTML输出场景
将表格两两分组为一行,每组内的两个表格各占50%宽度,再将三行拼接起来:
library(kableExtra) # 定义表格 t1 <- mtcars[1:3,] t2 <- mtcars[4:6,] t3 <- mtcars[7:9,] t4 <- mtcars[10:12,] t5 <- mtcars[13:15,] t6 <- mtcars[16:18,] # 构建每行的双表格布局 row1 <- kables(list(kable(t1) %>% kable_styling(), kable(t2) %>% kable_styling())) %>% column_spec(1, width = "50%") %>% column_spec(2, width = "50%") row2 <- kables(list(kable(t3) %>% kable_styling(), kable(t4) %>% kable_styling())) %>% column_spec(1, width = "50%") %>% column_spec(2, width = "50%") row3 <- kables(list(kable(t5) %>% kable_styling(), kable(t6) %>% kable_styling())) %>% column_spec(1, width = "50%") %>% column_spec(2, width = "50%") # 拼接所有行 row1 %>% append_row(row2) %>% append_row(row3)
PDF输出场景
借助LaTeX的minipage环境控制表格宽度,每行放置两个表格:
library(kableExtra) # 定义表格(同上) t1 <- mtcars[1:3,] t2 <- mtcars[4:6,] t3 <- mtcars[7:9,] t4 <- mtcars[10:12,] t5 <- mtcars[13:15,] t6 <- mtcars[16:18,] # 输出3×2布局 cat("\\begin{minipage}{0.48\\textwidth}\n") kable(t1) %>% kable_styling(latex_options = "hold_position") cat("\\end{minipage} \\hfill\n") cat("\\begin{minipage}{0.48\\textwidth}\n") kable(t2) %>% kable_styling(latex_options = "hold_position") cat("\\end{minipage}\n\n") cat("\\begin{minipage}{0.48\\textwidth}\n") kable(t3) %>% kable_styling(latex_options = "hold_position") cat("\\end{minipage} \\hfill\n") cat("\\begin{minipage}{0.48\\textwidth}\n") kable(t4) %>% kable_styling(latex_options = "hold_position") cat("\\end{minipage}\n\n") cat("\\begin{minipage}{0.48\\textwidth}\n") kable(t5) %>% kable_styling(latex_options = "hold_position") cat("\\end{minipage} \\hfill\n") cat("\\begin{minipage}{0.48\\textwidth}\n") kable(t6) %>% kable_styling(latex_options = "hold_position") cat("\\end{minipage}\n")
注意事项
- 确保已安装并加载
kableExtra包(执行install.packages("kableExtra")完成安装) - HTML布局依赖
kableExtra的kables()和column_spec()函数,PDF布局依赖LaTeX环境支持
内容的提问来源于stack exchange,提问作者jon
相关产品推荐
相关产品推荐

