[英]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.