各个级别的列标题和子标题

时间:2020-05-26 18:16:56

标签: r formatting levels columnname

对于我来说,这在概念上似乎是不费吹灰之力,但是以某种方式我无法弄清楚如何在R中完成此操作。我有一个数据帧,其中有两个分别绑定到9个级别的变量,例如:

data frame with 2 variables having 9 levels

为了对最终的用户和读者更加友好,我希望这看起来更具解释性,例如:

desired lay out for publication

但是在R中,什么是正确的工具和/或方法呢?我已经尝试过使用ftable和xtable,但是麻烦的是没有进一步的底层“原始”数据,而ftable / xtable要求将这样的数据布置为列联表以产生计数和均值等。我得到的最接近的试图使用flextable手动设置表格格式。

对于R来说,这可能是一项太谦虚的任务吗?我应该使用其他工具/语言吗?

感谢任何指针 --J。

- EDIT_20200528_2141:

@LenGreski指出tables::tabular()为此提供了条件(请参阅:https://cran.r-project.org/web/packages/tables/tables.pdf)。我只是想指出与solution linked above中所解释内容的特定区别。该解决方案假定您具有可以计算和平均的数字,在我的情况下,我只是这样:

     genre origin      mean       stdv
1  Western     PL 0.3213601 0.19510242
2  Western     IT 0.2502920 0.26645386
3  Western     US 0.4688884 0.06305476
4 Thriller     PL 0.3117736 0.17128256
5 Thriller     IT 0.1970238 0.27456382
6 Thriller     US 0.4371585 0.10925573
7 Romantic     PL 0.3334293 0.20280193
8 Romantic     IT 0.2502829 0.31400158
9 Romantic     US 0.4629377 0.02612357

因此基础数据,仅是均值和sds。这可能会使您陷入困境,因为tabular()确实想单独计数和平均频率。因此,标准解决方案会导致您执行以下操作:

tabular( Factor(genre) ~ Factor(origin) * ( mean + stdv ), data=movies )

乍一看似乎很神秘,但是一旦获得了记号,它实际上是有意义的。仔细研究文档(第26-29页)。它的工作原理:

          origin                         
          IT          PL        US       
 genre    mean   stdv mean stdv mean stdv
 Romantic 1      1    1    1    1    1   
 Thriller 1      1    1    1    1    1   
 Western  1      1    1    1    1    1   

您只会得到一个,因为tabular正在计算均值和sds的出现,因此在这种情况下它们均出现一次。第26页上提出了解决方案的提示:“如果该术语对一个函数求值,则它应该是一个汇总函数,当将其应用于值向量时会产生标量值,并且该标量将显示在表中。”这有点骇人听闻,但这意味着我们可以通过提供一个“摘要”函数来解决我们的问题,该函数只返回与输入相同的结果:

do_nothing <- function(X) {
    X
}
tabular( Factor(genre) ~ Factor(origin) * ( do_nothing*mean + do_nothing*stdv ), data=movies )

我们得到:

          origin                                                           
          IT                    PL                    US                   
          do_nothing do_nothing do_nothing do_nothing do_nothing do_nothing
 genre    mean       stdv       mean       stdv       mean       stdv      
 Romantic 0.2503     0.3140     0.3334     0.2028     0.4629     0.02612   
 Thriller 0.1970     0.2746     0.3118     0.1713     0.4372     0.10926   
 Western  0.2503     0.2665     0.3214     0.1951     0.4689     0.06305   

只剩下一个无用的标题。我们可以使用伪函数Heading()消除这一点:

tabular( Factor(genre) ~ Factor(origin) * ( Heading()*do_nothing*mean + Heading()*do_nothing*stdv ), data=movies )

最后我们有:

          origin                                    
          IT            PL            US            
 genre    mean   stdv   mean   stdv   mean   stdv   
 Romantic 0.2503 0.3140 0.3334 0.2028 0.4629 0.02612
 Thriller 0.1970 0.2746 0.3118 0.1713 0.4372 0.10926
 Western  0.2503 0.2665 0.3214 0.1951 0.4689 0.06305

那行得通,很好。需要思考的问题:如果我们没有没有基础数据,是否有一种更整洁,更简洁的方法来实现这一目标?

0 个答案:

没有答案
相关问题