r-降价-动态多行标题,第二行相同

r-降价-动态多行标题,第二行相同,r,r-markdown,kable,kableextra,flextable,R,R Markdown,Kable,Kableextra,Flextable,我试图在r-markdown中创建一个多行标题,但我遇到了问题1.)使其成为动态的,2.)允许标题的第二行相同 例如,在下面的数据集中,您可以看到有两个组,花瓣和间隔。每个都有长度和宽度 library(tidyverse) data <- iris[c(1, 51, 101), ] %>% gather(key = key, value = value, -Species) %>% separate(col = key, into = c("Group", "k

我试图在r-markdown中创建一个多行标题,但我遇到了问题1.)使其成为动态的,2.)允许标题的第二行相同

例如,在下面的数据集中,您可以看到有两个组,花瓣和间隔。每个都有长度和宽度

library(tidyverse)

data <- iris[c(1, 51, 101), ] %>% 
  gather(key = key, value = value, -Species) %>% 
  separate(col = key, into = c("Group", "key"), sep = "\\.") %>% 
  spread(key = key, value = value, )

data

#       Species      Group   Length Width
# 1     setosa       Petal   1.4    0.2
# 2     setosa       Sepal   5.1    3.5
# 3 versicolor       Petal   4.7    1.4
# 4 versicolor       Sepal   7.0    3.2
# 5  virginica       Petal   6.0    2.5
# 6  virginica       Sepal   6.3    3.3

我一直在试验
kable
flextable
软件包,但这些示例似乎对我试图避免的标题进行了硬编码。

对于flextable,应该是这样的:

library(tidyverse)
library(flextable)

data <- iris[c(1, 51, 101), ]

header_df <- tibble( key = colnames(data) ) %>% 
  separate(col = key, into = c("Group1", "Group2"), sep = "\\.", remove = FALSE, fill = "left")

data %>% 
  select(Species, everything()) %>% 
  flextable() %>% 
  set_header_df(mapping = header_df, key = "key") %>% 
  merge_h(part = "header") %>% 
  theme_booktabs()
库(tidyverse)
图书馆(flextable)
数据%
选择(种类,所有内容())%>%
flextable()%%>%
设置标题(映射=标题标题标题,key=“key”)%>%
合并(part=“header”)%>%
主题(booktab)

您可以查看
formattable
kable
,谢谢@David Gohel。我想我开始明白了。我需要一个列的键。如果查看示例中的“原始”数据样本是如何构造的,我是否需要将其返回到原始
iris
表单(spetal.width等)?或者,从我的示例数据的结构(两列长度和宽度,然后是一组列)到您提供的数据,有没有其他不同的方法?@alexb523 flextable不会重新构造您的df,因此我猜答案是您不能将其结构保持为
数据
,您需要使用data.table::dcast(或tidyr::spread)为flextable构建它。是否有一种好的方法将
物种(单词)合并到中心?是的,请参见
?flextable::align
。它应该是对齐的(ft,j=1,align=“center”,part=“header”)
library(tidyverse)
library(flextable)

data <- iris[c(1, 51, 101), ]

header_df <- tibble( key = colnames(data) ) %>% 
  separate(col = key, into = c("Group1", "Group2"), sep = "\\.", remove = FALSE, fill = "left")

data %>% 
  select(Species, everything()) %>% 
  flextable() %>% 
  set_header_df(mapping = header_df, key = "key") %>% 
  merge_h(part = "header") %>% 
  theme_booktabs()