在knitr中打印漂亮的交叉表格

在knitr中打印漂亮的交叉表格,r,knitr,xtable,stargazer,R,Knitr,Xtable,Stargazer,我想要的是使用R、Markdown和knitr从RStudio打印漂亮的交叉表,可以是pdf文件,也可以是html文件。我怀疑我错过了一些非常明显的东西,因为我不敢相信这会如此困难。我用xtabs或ftable制作交叉标签 我想要的是一个打印精美的R控制台输出版本 > x Col Row A B C D 15 9 7 E 13 14 9 F 8 8 17 > f Col A B C Row D 15

我想要的是使用R、Markdown和knitr从RStudio打印漂亮的交叉表,可以是pdf文件,也可以是html文件。我怀疑我错过了一些非常明显的东西,因为我不敢相信这会如此困难。我用xtabs或ftable制作交叉标签

我想要的是一个打印精美的R控制台输出版本

> x
   Col
Row  A  B  C
  D 15  9  7
  E 13 14  9
  F  8  8 17
> f
    Col  A  B  C
Row             
D       15  9  7
E       13 14  9
F        8  8 17
我已经尝试了几种不同的解决方案,没有一种真正有效,并在所附的.Rmd文件中显示。(我尝试过pdf和html输出。)

感谢您的帮助,如果这是一个非常愚蠢的问题,并且有一个显而易见的答案,我深表歉意


Anthony Staines

我建议您使用
stargazer
如下:

  • 使用
    quote=FALSE
  • 确保指定
    type=“html”
试试这个:

# stargazer

```{r, echo=TRUE, results='asis'}
stargazer(format(f, quote=FALSE, justify="right"), type="html")
```

kable的另一种替代方法是使用同名软件包的
pander
,它提供了一种简单的方法来生成带有一系列选项(如
样式
)的降价表和一种通用的S3方法:

> pander(x)

-------------------
    A   B   C 
------- --- --- ---
 **D**  15   9   7 

 **E**  13  14   9 

 **F**   8   8  17 
-------------------

> pander(f)

----- ----- --- --- ---
      "Col" "A" "B" "C"

"Row"                  

 "D"        15   9   7 

 "E"        13  14   9 

 "F"         8   8  17 
----- ----- --- --- ---
如果要生成旧的
rmarkdown
样式的管道表格,请添加
stlye='rmarkdown'
参数,尽管AFAIK Pandoc也是该表格的新标准,它支持上述多行表格。

进一步挖掘使我想到

答案是显而易见的,令人尴尬的是——包裹


我认为必须有一个更简单的方法来做到这一点。尽管如此,非常感谢Andrie和daroczig的帮助回答。

请考虑
gtsummary
软件包中的
tbl\u cross

library(gtsummary)

set.seed(893)
adf <- data.frame(Col = sample(c('A','B','C'),100,replace=TRUE),
                  Row = sample(c('D','E','F'),100,replace=TRUE))
tbl_cross(adf, row=Row, col=Col, percent="row")
库(gtsummary)
种子集(893)

adf
kable()
支持列名;关于行名称,它似乎不是HTML或LaTeX中表的标准组件,因此不清楚“支持”的真正含义。我同意HTML和LaTeX都不直接支持此类标签,但要使交叉标签有意义,这两者都是必需的。需求是生成一个可放入期刊文章的表。我现在实际做的是获取R控制台输出,并使用Libre Office中的table->Convert->Text-to-table函数将其转换为表,但这不是非常可重复的!试过了,效果很好-谢谢你的指导,非常感谢!pander向我提供了一个错误“if(!has.rownames(df)){:缺少需要TRUE/FALSE的值”pader::pander()打印交叉表的规则。谢谢开发人员。也尝试过了,而且效果很好-谢谢您的指导,非常感谢!如果您知道您的输出将仅为LaTeX,那么生成复杂的表相对容易,否则这不是一个小问题。很难实现可移植性(一个复杂的表格,可以使用降价、HTML、LaTeX和其他格式)。我开始欣赏这一点!你已经做的非常令人印象深刻,所以请接受我对你所有工作的感谢。
> pander(x)

-------------------
&nbsp;   A   B   C 
------- --- --- ---
 **D**  15   9   7 

 **E**  13  14   9 

 **F**   8   8  17 
-------------------

> pander(f)

----- ----- --- --- ---
      "Col" "A" "B" "C"

"Row"                  

 "D"        15   9   7 

 "E"        13  14   9 

 "F"         8   8  17 
----- ----- --- --- ---
library(gtsummary)

set.seed(893)
adf <- data.frame(Col = sample(c('A','B','C'),100,replace=TRUE),
                  Row = sample(c('D','E','F'),100,replace=TRUE))
tbl_cross(adf, row=Row, col=Col, percent="row")