[英]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
我只想更改 dataframe 中的名称,但这不是一个选项,因为在我的实际表中,标题将具有重复的名称(即“2020”、“2021”、“2020”、“2021”、. ..),R 不允许。
我看到了两个建议。
如果您可以提供 colnames 与标签相关联的 data.frame,则可以使用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
或者您可以使用setNames
或names<-
来确保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
从文档中, values
参数必须是
一个命名列表(名称是数据列名),每个元素都是一个字符值,指定要使用的 label。
实现所需结果的一种选择是使用setNames
。
此外,我使用ft$col_keys[seq(length(values))
来获取ft
表 object 的列名。
library(flextable)
values <- c("SEPAL LENGTH", "SEPAL WIDTH", "PETAL LENGTH", "PETAL WIDTH")
ft <- flextable(head(iris))
ft <- set_header_labels(ft,
values = setNames(values, ft$col_keys[seq(length(values))])
)
ft
由reprex package (v2.0.1) 于 2021 年 12 月 14 日创建
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.