Closed. This question does not meet
Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为
on-topic用于堆栈溢出。
5年前关闭。
Improve this question
是否有一种简单的方法可以自动将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似乎不再起作用。
有什么建议么?
我也有同样的需求,但最终还是使用了htmlTable软件包,它非常“具有成本效益”。这将创建一个HTML表(在RStudio中,它是在右下角的“查看器”窗口中创建的,我只是使用鼠标复制粘贴标记到Word中进行标记。(从表底部开始标记,然后向上拖动鼠标, Word可以很好地处理这些表。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)
将格式设置为粗体或斜体并不完全简单,但是可以通过将表内容包装在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'
将粗体字体替换为红色背景色。所有这些更改都至少会在我的计算机上(Windows 7)保留到Word中。