【问题标题】:Keep table dimnames in knitr or pander output?在knitr或pander输出中保留表dimnames?
【发布时间】:2015-12-31 19:56:17
【问题描述】:

我正在使用knit::kablepander::pandoc 打印频率表,通常这对于HTML/Word/LaTeX 输出非常有用。但有时我想在最终产品中保留维度名称。不幸的是,panderknitr 在转换为降价时都会删除这些。

# create a simple table
tab <- table(mtcars$gear, mtcars$carb)

# add dimension names
names(dimnames(tab)) <- c("gear", "carb")

这会创建一个表:

    carb
gear 1 2 3 4 6 8
   3 3 4 3 5 0 0
   4 4 4 0 4 0 0
   5 0 2 0 1 1 1

但是现在如果我们使用 kable 进行打印:

> kable(tab)

|   |  1|  2|  3|  4|  6|  8|
|:--|--:|--:|--:|--:|--:|--:|
|3  |  3|  4|  3|  5|  0|  0|
|4  |  4|  4|  0|  4|  0|  0|
|5  |  0|  2|  0|  1|  1|  1|

没有维度名称! (并且?kable 并未指明任何包含它们的选项。)

对保存这些的工具有什么建议吗?我注意到descr:CrossTable 可以解决问题,但包含很多我想省略的额外信息。

非常感谢。

【问题讨论】:

    标签: r knitr r-markdown pander


    【解决方案1】:

    您可以使用例如ftable 创建一个隐含维度名称的平面列联表:

    > pander::pander(ftable(tab))
    
    ---- ---- - - - - - -
         carb 1 2 3 4 6 8
    
    gear                 
    
     3        3 4 3 5 0 0
    
     4        4 4 0 4 0 0
    
     5        0 2 0 1 1 1
    ---- ---- - - - - - -
    

    或者您也可以从descr::CrossTable 中抑制不需要的单元格,例如:

    > pander(descr::CrossTable(tab, prop.r = FALSE, prop.c = FALSE, prop.chisq = FALSE))
    
    ------------------------------------------------------------------------------
     &nbsp;\   carb\    &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\ 
      gear       1         2         3         4         6         8       Total  
    --------- -------- --------- --------- --------- --------- --------- ---------
     **3**\   &nbsp;\  &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\  
       N\       3\       4\        3\        5\        0\        0\         15\   
    Total(%)   9.375%   12.500%   9.375%    15.625%   0.000%    0.000%            
    
     **4**\   &nbsp;\  &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\  
       N\       4\       4\        0\        4\        0\        0\         12\   
    Total(%)  12.500%   12.500%   0.000%    12.500%   0.000%    0.000%            
    
     **5**\   &nbsp;\  &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\   &nbsp;\  
       N\       0\       2\        0\        1\        1\        1\         5\    
    Total(%)   0.000%   6.250%    0.000%    3.125%    3.125%    3.125%            
    
      Total      7        10         3        10         1         1        32    
    ------------------------------------------------------------------------------
    

    或在GH 上提交工单:)

    【讨论】:

    • 完美运行!这太简单了,我不敢相信在来 SO 寻求帮助之前我没有尝试过。谢谢!
    • 还有一件事——我刚刚注意到您的答案中pander::pander(ftable(tab)) 的输出在任何列、行或维度名称周围都没有引号。但是,当我运行相同的命令时(Pander 0.6.0 on R 3.2.2 for OS X 10.11.2),所有内容都用双引号括起来。知道如何抑制这种情况吗?再次感谢。
    • @ChadBDot 不应该出现在最新版本的 pander 上——您能否在 GH 上提交一张票,包括 devtools::session_info() 和一个完整的可重现示例(如上面创建 tab 和那么pander + ftable 电话?那会很有帮助。
    • 很高兴知道。将提交一张票,@daroczig。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2016-03-19
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多