根据字符字符串动态设置 flextable 的列名称

7

flextable帮助文档中描述了如何添加新的标题,即手动键入每个现有标题名称,并针对每个新标题名称进行添加,如下所示:

library(flextable)
ft_1 <- regulartable(head(iris))
ft_1 <- set_header_labels(ft_1, Sepal.Length = "SL",
                          Sepal.Width = "SW", Petal.Length = "PL",
                          Petal.Width = "PW"
)
ft_1

如何从一个字符串中添加所有新的标题名称,例如

(names2<-c('SL','SW','PL','PW','SPECIES'))
[1] "SL"      "SW"      "PL"      "PW"      "SPECIES"

迄今为止,我已经想出了一个非常hacky的解决方案:

names(names2)<-names(ft_1$header$dataset[1,])

ft_1$header$dataset[1,]<-names2

在将数据集转换为flextable之前,更改数据集中的列名怎么样? - morgan121
1
@user10626943 感谢您的评论。这是为了添加第二个标题,除了数据框的列名之外。 - J.Con
希望@davidgohel能看到这个并回复一些好的东西。他通常非常敏感和乐于助人 :) 但我总是有困难让ft按照我想象的那样工作:P - morgan121
@user10626943 是的,我注意到他在搜索ft上的旧SO问题时非常有帮助。 - J.Con
1
是的,当使用标签officer/flextable时,我会收到警报,并尽力回答。 - David Gohel
2个回答

6

set_header_labels 是用于对标题值进行微小修改的功能。如果您想将 df 列名与一组或多个新的标题行进行映射,则可以使用 set_header_dfhttps://davidgohel.github.io/flextable/articles/layout.html#define-headers-with-a-reference-table

library(flextable)

names1 <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
names2 <- c('SL','SW','PL','PW','SPECIES')

ft <- flextable( head( iris ) )
ft <- set_header_df(x = ft, mapping = data.frame(keys = names1, values = names2, stringsAsFactors = FALSE),
              key = "keys" )

# the following call is needed as header formats have been 
# replaced by vanilla formats when set_header_df() has been called
ft <- theme_booktabs(ft) 
ft

enter image description here


1
感谢您的快速回答和出色的软件包! - J.Con

1

好的,在几次编辑后,我希望这对你有用。

你的方法也很不错。

names1 <- c("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")
names2 <- c('SL','SW','PL','PW','SPECIES')

ft <- flextable( head( iris ),
                   col_keys = names1 )

oldHeaders <- names1
newHeaders <- names2

headerlist <- setNames(as.list(newHeaders), 
                       oldHeaders)

ft <- do.call(set_header_labels, c(list(x = ft, top = F), headerlist))
ft

谢谢,这很棒。我接受了其他答案,因为它来自包的创建者,因此应被认为是技术上正确的。 - J.Con
没问题@J.Con。另一个回答更加直截了当,正如他们所说的那样。感谢提问。我一直在寻找这样的软件包。 - hmhensen
1
这个答案帮了我很多。我建议使用 tidyverse 包和 flextable - J.Con

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接