使用Flextable实现多行表头

3

我试图使用flextable格式化表格时,出现了很多问题。例如,下面的表格就是我开始使用的:

> df
   name   x1   x2   x3   x1   x2   x3
1  <NA> 2010 2010 2010 2011 2011 2011
2 name1    1    1    1    1    1    1
3 name2    2    2    2    2    2    2
4 name3    3    3    3    3    3    3
5 name4    4    4    4    4    4    4
6 name5    5    5    5    5    5    5

我想做的是有两个标题 - 一个是每一组3列合并年份,另一个是每3列的列名相同。例如,我希望它看起来像这样:

> df
   name x1   x2 x3 x1   x2 x3
1  <NA>    2010       2011   
2 name1  1    1  1  1    1  1
3 name2  2    2  2  2    2  2
4 name3  3    3  3  3    3  3
5 name4  4    4  4  4    4  4
6 name5  5    5  5  5    5  5

此外,年份标题应该在x1、x2、x3标题上方。我遇到的问题是如何在R中指定两个标题,然后如何在flextable中合并多组3列。我可以使用以下方法合并第一组列(2010):
flextable(df) %>%
  merge_at(i = 1,j = c(2:4), part = "body")

但我不确定如何对多个分组执行上述操作。此外,由于该行没有被指定为“标题”,所以我必须指定的部分是“正文”。

任何帮助或指向正确方向的指针都将不胜感激!


我现在推荐使用 gt 库进行此类型的格式化,这对您来说是否是一个选项?https://gt.rstudio.com/ - Nate
谢谢,是的,那对我来说肯定是一个选项。我会调查一下。 - coderX
这里的文档 https://davidgohel.github.io/flextable/articles/layout.html#manage-headers-and-footers 解释了如何管理表头和合并单元格。 - David Gohel
谢谢!不知为何,我只看到了主要的Flextable页面,错过了顶部带有详细信息的页眉。感谢您在这个软件包上所做的所有工作,它很棒! - coderX
不用客气。我觉得你需要将数据与头信息分开,这样会更容易。 - David Gohel
非常感谢!我的表格现在看起来完全符合我的要求。 - coderX
1个回答

4
flextable库提供了add_header_row函数来实现这个功能。使用您的数据框df,以下代码应该可以解决问题。
    flextable(df) %>% 
      add_header_row(top = TRUE, values = c("", "2010", "2011"), colwidths = c(1,3,3))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接