有没有一种在R中为Word创建漂亮表格的方法?

7

我在stackoverflow上提出了问题,这是我最后的希望 :-) 我需要用Word生成一份报告。 我使用R Markdown制作许多表格。 我希望我的表格看起来美观!但我尝试过的所有方法(pander, KableExtra, flextable)都没有起作用。

我使用coxph模型得到结果,对其进行聚合,然后构造data.frame,它看起来像这样:

  1                                        Model 1                         Model 2
2                                         n= 375                          n= 374
3                                          e= 65                           e= 64
4                                       PH= 0.46                        PH= 0.97
5            Weight                          ---     1.0  [ 1.0 ; 1.1 ] p = 0.03
6              Size                          --- 1.0  [ 1.0 ; 1.0 ] p = < 10^-3^
7              GR I                          ---                               1
8             GR II                          --- 1.2e+06  [ 0.0 ; Inf ] p = 1.00
9            GR III                          --- 1.4e+06  [ 0.0 ; Inf ] p = 1.00
10            Roads                            1 1.1  [ 1.0 ; 1.1 ] p = < 10^-5^
11            Score  1.0  [ 0.9 ; 1.0 ] p = 0.04                             ---
12 Likelihood ratio Chi-two= 4.48 p-value= 0.034  Chi-two= 2.73 1 p-value= 0.098
                                V4
1                          Model 3
2                           n= 374
3                            e= 64
4                         PH= 0.96
5      1.0  [ 1.0 ; 1.1 ] p = 0.05
6  1.0  [ 1.0 ; 1.0 ] p = < 10^-2^
7                                1
8  1.3e+06  [ 0.0 ; Inf ] p = 1.00
9  1.7e+06  [ 0.0 ; Inf ] p = 1.00
10 1.1  [ 1.1 ; 1.1 ] p = < 10^-6^
11     1.0  [ 0.9 ; 1.0 ] p = 0.10

在 Latex 上创建漂亮的表格非常容易,我使用 xtable 从下面的链接中获取了这张表格:Latex table
在 R Markdown 中,我使用 print(kable(table)),但是我无法使用任何来自 KableExtra 的功能来改善呈现效果(在生成 Word 时无法正常工作)。此外,我的表格是在循环中制作的,使情况更加困难。
您是否有任何线索可以从 R Markdown 创建此类表格并在 Word 中使用?特别地:
  • 我们可以换行吗?
  • 我们可以创建多行单元格吗?
  • 我们可以创建多列单元格吗?
  • 在我的情况下如何添加条纹,其中 KableExtra 不起作用?
感谢对上述问题的任何答案。 :-)

可能是重复的问题:如何使用ASCII、HTML或Markdown格式在R中打印表格? - Paul Endymion
我尝试了这种方法但没有成功!我的表格是在循环中生成的,所以我必须使用print函数来改变结果。 - Flora Grappelli
我发现将编织内容转换为 Word 格式在许多情况下效果不如先将其编织为 HTML,然后将所有内容复制粘贴到 Word 中,因为 Word(有时)可以相当不错地翻译 HTML 文档。显然这可能并不是解决您问题的令人满意的方案,仍需要在 Word 中进行大量编辑。 - yoland
您可以尝试使用 huxtable 中的 huxreg() 函数(我的软件包)。它在底层使用 flextable 将内容输出到Word文档中。您确实可以创建多行和多列的单元格。 - dash2
@dash2 谢谢你的建议!flextable做得到 :-) 昨天我花了一整天的时间来使用它。它似乎很适合这个任务。一开始我想使用kableExtra,但是flextable似乎更适合完成这种任务。 - Flora Grappelli
2个回答

1

kableExtra专注于为HTML内容创建表格。然而,我有时也会使用它通过之前的HTML输出来创建Word文档中的表格。首先,在kableExtra中设置表格规格(请参阅文档;重要提示:在kableExtra规格中跳过html属性,这会使将表格复制到Word变得困难)。然后,我只需使用results='show'将相应的RMarkdown文档编织成HTML(在这些情况下,我不使用print)。从生成的HTML文档中,您应该能够将表格复制并粘贴到Word中。您试过这个吗?我假设print命令不允许通常的kableExtra表格样式。您还可以使用lapply循环处理您的表格吗?


感谢您的回答!在循环中使用 kableExtra 时,如果没有使用 print 命令,则 Word 或 Html 中不会显示任何结果,即使使用了 results='show' 参数也是如此。我将尝试使用 lapply 命令进行测试,但我并不抱有太大希望。 - Flora Grappelli
我尝试使用lapply,但由于我的函数有两个参数,所以这并不简单。而且mapply无法产生想要的输出。我想我得自己动手改进一下。 - Flora Grappelli
你想修改/改进你的回答还是让我根据你的回答提出建议? - Flora Grappelli
1
也许我们不需要使用lapply重新发明轮子。我刚刚看到已经发布了一个可能的解决方案,允许使用print和kable_styling: [https://dev59.com/_a3la4cB1Zd3GeqPMmoC] 这个例子是为pdf输出而设计的(甚至在编织到Word时也可能有效),但在使用"html"代替"latex"时,也应该适用于html。但也许阅读您帖子的其他人已经使用lapply完成了这项工作。 - GRowInG
这正是我最终使用的!非常感谢您提供的所有建议 :-) - Flora Grappelli

1

你已经尝试过stargazer包了吗?你可以使用type参数指定表格的输出格式。当knitting到word时,唯一有效的格式是text格式。请参见下面的循环示例。它应该可以运行,但可能需要调整。

```{r word_table, comment = ''}
library(stargazer)

lapply(1:3, function(x){
  print(paste("table", x))
  stargazer(attitude, type = 'text')      
})
```

我从这段代码中进行了调整:Stargazer的输出是代码,而不是表格


感谢您的建议。如在建议页面中所指定的答案:您的过程提供了“原始但可读的表格”。我不能在我的报告中使用原始表格。无论如何,还是非常感谢您!! - Flora Grappelli
祝你好运! - Paul Endymion

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接