R数据框轻松导出和表格格式化为Word?

时间:2015-08-14 13:28:56

标签: r ms-word

是否有一种简单的方法可以自动将R数据帧转换为APA格式的漂亮Word表格来发布稿件?我目前正在通过将表保存在csv中,在excel中打开它,将excel表复制到Word,并在那里格式化它,但我希望有一种方法可以自动化R中的格式,这样做当我将它转换为Word时,它已经是APA格式,因为Word在自动化方面很糟糕。

基本上,我想继续在Word中编写手稿本身,同时在R中进行分析。然后通过脚本将R中的所有结果收集到一个表中(具有可手动修改的格式)并将其转换为我能够的任何格式然后只需复制粘贴到Word(以便格式实际成立)。当我需要修改表时,我会在R中进行更改,然后再次运行脚本而无需在Word中进行任何更改。

我不想学习LaTeX,因为我所在领域的每个人都使用Word来跟踪轨道更改等功能,并且我使用Zotero插件进行引用,因此将编写与分析区分开来更简单。另外,我是一名心理学家,而不是编码员,所以为此学习很多新技术对我来说可能不值得。通常情况下,新技术会带来新的技术问题,我的目标是让我的工作流程更快,但不会以不可预测性为代价(这可能会使我在无法负担的时刻正好放慢速度)。

我找到了一个R+knitr+rmarkdown+pander+pandoc solution“尽可能少的开销”,但它似乎仍然相当沉重,因为除了R我不知道任何这些技术。我不急于开始学习所有这些,因为它似乎是为了完成写作而在R中最终完成,而我想将我的写作和代码分开 - 我在写作中从不需要代码,只需要结果表。另外,基于这些示例,它似乎直接从R代码中获取值(例如,从summary()获取以创建描述性表),而我需要能够在转换之前手动修改我的表,例如,编写标题和注释(如特定注释到一个单元格并在底部解释)。我还发现了R2wd,但它似乎是与上述解决方案相同的“整个R工作流程”问题的较旧尝试。 SWord似乎不再起作用了。

有什么建议吗?

3 个答案:

答案 0 :(得分:8)

(只是为了通知你,我是我推荐你的套餐的作者......)

您可以使用包ReporteRs将表格输出到Word。在这里看一个教程(不是我的): http://www.sthda.com/english/wiki/create-and-format-word-documents-using-r-software-and-reporters-package

对象 FlexTable 让您可以使用一些标准R代码轻松地格式化和排列表格。例如,要将第二列设置为粗体,代码如下所示:

myFlexTable[, 2] = textBold()

这里有(旧)示例: http://davidgohel.github.io/ReporteRs/flextable_examples.html

可以使用函数addFlexTable将这些对象添加到Word报告中。可以使用函数writeDoc生成单词报告。

如果你在RStudio工作,你可以打印对象,它将在html查看器中呈现,这样你可以在对它的内容感到满意时将它导出到Word中。

您甚至可以添加真正的Word脚注(请参阅下面的链接) http://davidgohel.github.io/ReporteRs/pot_objects.html#pot_footnotes

如果您需要更多的表格输出,我建议您使用处理rtable个对象的xtable包(以及我必须开发的其他东西来满足我的同事或客户) - 快速演示可以是在这里看到:

http://davidgohel.github.io/tabular/

希望它有所帮助...

答案 1 :(得分:7)

我有同样的需求,我最终使用了htmlTable包,这非常“具有成本效益”。这会创建一个HTML表格(在RStudio中,它是在右下角的“查看器”窗口中创建的,我只是使用鼠标复制粘贴到Word上进行标记。(从表格底部开始标记并向上拖动鼠标,即你确定要包含HTML代码的开头。)Word很好地处理这些表。语法非常简单,只涉及函数htmlTable(),但仍然能够制作更复杂的表,例如分组行以及主要和次要列标题(即跨越多列的列标题)。查看vignette中的示例。

需要注意的一点是:htmlTable将无法使用因子变量,即它们将以整数形式出现(根据因子级别)。因此,请使用stringsAsFactors = FALSE阅读数据,或使用as.character()进行转换。

包含尾随零可以使用txtRound函数完成。例如:

mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE)
txt <- txtRound(mini_table, 2)

将格式化soch指定为粗体或斜体并不是完全简单的,但可以通过将表内容包装在HTML代码中来完成。例如,如果你想让整个列变粗,可以这样做(请注意在paste0内使用单引号和双引号):

library(plyr)
mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE)
txt <- txtRound(mini_table, 2)
txt$x <- aaply(txt$x, 1, function(x)
               paste0("<span style='font-weight:bold'>", x, "</span")
              )
htmlTable(txt)

当然,在Word中会更容易。但是,根据某些条件向数字添加格式更为有趣。例如,如果我们想通过应用粗体字体来强调x的所有小于0.2的值,我们可以按如下方式修改上面的代码:

library(plyr)
mini_table <- data.frame(Name="A", x=runif(20), stringsAsFactors = FALSE)
txt <- txtRound(mini_table, 2)
txt$x <- aaply(txt$x, 1, function(x) 
               if (as.numeric(x)<0.2) { 
                  paste0("<span style='font-weight:bold'>", x, "</span>")
               } else {
                  paste0("<span>", x, "</span>")
               })
htmlTable(txt)

如果您想要更加强调,可以使用上面代码中的span style='background-color: red'将红色背景颜色替换为粗体字体。所有这些更改都会转移到Word,至少在我的计算机上(Windows 7)。

答案 2 :(得分:-1)

简短的回答是“不是真的”。我从来没有太多运气将格式良好的表格转换为MS Word。我可以为您提供的最佳方法需要使用Rmarkdown将表格呈现为HTML文件。您可以将HTML文件中的结果复制并粘贴到MS Word,但我不保证格式化的效果如何。

要格式化表格,您可以尝试使用xtable包或pixiedust包。但同样,不能保证格式化将被转移。