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

时间:2018-02-14 13:02:15

标签: r export-to-word

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

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

根据文档“使用ft_object []&lt; - 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')

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

有谁知道为什么会这样,以及如何解决问题?

1 个答案:

答案 0 :(得分: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

输出:

enter image description here

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

set_formatter_type(fmt_double = "%.1f")

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

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