有没有办法通过按顺序列出新的 header 名称来指定灵活的 header 标签?

Is there a way to specify flextable header labels by just listing the new header names in order?

我正在使用 flextable 和一个有很多列的数据集,我想使用 set_header_labels() 一次按顺序更改它们,而不必指定是哪个名称与每个特定值一起使用。但是,我的代码保持 运行 但不工作。例如,这段代码有效:

library(flextable)
ft <- flextable( head( iris ))
ft <- set_header_labels(ft,
  values = list(Sepal.Length = "Sepal length",
                Sepal.Width = "Sepal width",
                Petal.Length = "Petal length",
                Petal.Width = "Petal width" ) )
ft

但是这段代码没有任何改变:

library(flextable)
ft <- flextable( head( iris ))
values <- c("SEPAL LENGTH", "SEPAL WIDTH", "PETAL LENGTH", "PETAL WIDTH")

ft <- set_header_labels(ft,
                        values = values)
ft

我只想更改数据框中的名称,但这不是一个选项,因为在我实际的 table 中,headers 将有重复的名称(即“2020”, “2021”、“2020”、“2021”、...),R 不允许。

我看到了两个建议。

如果您可以提供 data.frame,其中 colnames 与标签关联,则可以使用 set_header_df

library(flextable)
# suggestion 1: requires all names ----
ref_table <- data.frame(
  key = colnames(iris),
  label = c("SEPAL LENGTH", "SEPAL WIDTH", "PETAL LENGTH", "PETAL WIDTH", "SPECIES")
)
ft <- flextable( head( iris ))
ft <- set_header_df(ft, mapping = ref_table, key = "key")
ft <- theme_booktabs(ft)
ft

或者您可以使用 setNamesnames<- 来确保 set_header_labels 发挥作用(这是通过匹配名称 (colkeys) 和相关标签来完成的。

# suggestion 2: does not requires all names  ----
values <- setNames(c("SEPAL LENGTH", "SEPAL WIDTH", "PETAL LENGTH", "PETAL WIDTH"),
         colnames(iris)[-5]
)
ft <- flextable( head( iris ))
ft <- set_header_labels(ft, values = values)
ft