0

我有一个简单的数据框,我正在尝试导出到 word 文档。我正在与 ReporteRs 合作。我希望所有数字都位于单元格的中心(在正文和标题中)。

a <- 1:5
b <- 1:5
df <- data.frame(a,b)

根据文档“使用 ft_object[] <- value 对 FlexTable 的整个部分(正文、页眉或页脚)执行操作。”

所以我尝试

df_Flex <- FlexTable(df)
setFlexTableWidths(df_Flex, rep(0.5,2))
df_Flex[] <- parProperties(text.align = 'center')

然而,结果是一个表格,只有正文中的数字位于中心。标题不是。如果我希望标题和正文都位于中心,我必须编写两行代码

df_Flex[] <- parProperties(text.align = 'center')
df_Flex[,,to='header'] <- parProperties(text.align = 'center')

这很烦人,因为如果我想执行其他格式化,我每次都需要编写两次代码。

有谁知道为什么会发生这种情况以及如何解决这个问题?

4

1 回答 1

3

使用 flextable 包本身提供的函数,而不是在 reporteRs 中提供的函数,因为它们提供了一个更简单的接口来修改 body 和 header 参数。使用 magrittr 或 dplyr 的管道运算符的示例:

df_Flex2 = 
  regulartable(df) %>%
  width(width = c(0.5, 2)) %>%
  align(align = "center", part = "all")

编辑:格式化小数位

要控制在常规表中为非整数值显示的小数位数,请使用 set_formatter 函数,并为要以不同小数位显示的每一列使用自定义格式:

df_Flex2 = 
  regulartable(df) %>%
  set_formatter(a = function(x) sprintf("%.1f", x),
                b = function(x) sprintf("%.1f", x)) %>%
  width(width = c(0.5, 2)) %>%
  align(align = "center", part = "all")
df_Flex2

输出:

在此处输入图像描述

如果您不想命名单个列,您可以使用 set_formatter_type 代替 set_formatter 为数字双精度类型设置修改后的默认值。此示例将正则表中双精度的小数位数设置为管道表达式中的小数点后 1 位:

set_formatter_type(fmt_double = "%.1f")

如果不与管道 ( %>%) 一起使用,则需要提供正则表变量的名称作为第一个参数:

set_formatter_type(df_Flex2, fmt_double = "%.1f")
于 2018-02-14T13:51:37.593 回答