【问题标题】:r-markdown - dynamic mutli-line header with second line the samer-markdown - 动态多行标题与第二行相同
【发布时间】:2019-08-09 02:26:03
【问题描述】:

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

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

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

我希望结果是一个多行标题,其中按花部分分组(按唯一值分组,无论它们可能是什么),长度和宽度作为第二行。像下面这样:

# --------------------------------------------
#            Petal            Sepal
# --------------------------------------------
# Species    Length  Width    Length    Width
# --------------------------------------------
# setosa     1.4     0.2      5.1       3.5
# versicolor 4.7     1.4      7         3.2
# virginica  6       2.5      6.3       3.3
# --------------------------------------------

我一直在尝试使用 kableflextable 包,但这些示例似乎对我试图避免的标头进行了硬编码。

【问题讨论】:

  • 你可以从here查看formattablekable

标签: r r-markdown kable kableextra flextable


【解决方案1】:

使用 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()

【讨论】:

  • 谢谢,@David Gohel。我想我开始明白了。我需要一个列的键。如果您查看示例中“原始”数据样本的结构,我是否需要将其转回原始iris 表单(spetal.width 等)?或者有没有一种不同的方式可以从我的示例数据的结构(两列长度和宽度,然后是一个组列)到您提供的内容?
  • @alexb523 flextable 不会重组你的 df,所以我想答案是你不能保持它的结构为data,你需要使用 data.table::dcast (或 tidyr: :spread) 来为 flextable 构建它。
  • 有没有什么好办法可以合并Species(字)居中?
  • 是的,请参阅?flextable::align。应该是align(ft, j=1, align="center", part="header")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 2010-09-23
  • 2021-12-31
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多