在 R 中为 Word 格式化和导出数据框

Formatting and exporting a data frame for Word in R

我有一个简单的数据框,我正在尝试将其导出到 word 文档。我在工作 与记者。我希望所有数字都位于单元格的中心(在 body 和 header 中)。

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

根据文档"Use ft_object[] <- value to perform the operation on the whole part (body, header or footer) of the FlexTable."

所以我试试

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

然而,结果是 table,只有 body 中的数字在 中心。 header 不是。如果我想让 header 和 body 都位于中心,我必须写两行代码

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

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

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

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

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

编辑:格式化小数位

要控制正则表中 non-integer 值显示的小数位数,请使用 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 来为数字双精度类型设置修改后的默认值。此示例将正则表中双精度数的小数位数设置为管道表达式中的小数点后一位:

set_formatter_type(fmt_double = "%.1f")

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

set_formatter_type(df_Flex2, fmt_double = "%.1f")