如何使用 R 的 summarytools 包中的 ctable 重命名行和列变量名输出?

问题描述

我非常喜欢 R 的简单函数,例如 table(),用于快速查看二元表,但是当我想要在同一输出显示频率和百分比时,我使用 summarytools 包中的 ctable()。

有时我的变量名很长,这对 table() 来说没有问题;我只是在 table() 函数快速重命名。但是,我还没有弄清楚如何为 ctable() 输出进行相同类型的变量标签重命名。我在 SO 上找到了一些关于 ctable() 和标签的帖子,但这些与其他更复杂的工作有关,例如涉及 kable() 和 Rmarkdown。我希望将所有内容都隐藏在原始控制台输出中,最好都在 ctable() 中,或者嵌套在另一个函数中,例如 print()。

以下代码示例说明了我想做的事情以及到目前为止我遇到的问题。

# load packages
library(summarytools)
# load example data - actual values don't matter here
data("mtcars")
# copy a variable so it has a long name
mtcars$really_long_variable_name_for_vs <- mtcars$vs

这是一个简单的 table() 输出示例。

没有标签的丑:table(mtcars$gear,mtcars$really_long_variable_name_for_vs)

   0  1
3 12  3
4  2 10
5  4  1

易于添加行和列名称table("gear"=mtcars$gear,"vs"=mtcars$really_long_variable_name_for_vs))

    vs  
gear  0  1
   3 12  3
   4  2 10
   5  4  1

但是 ctable() 不是那么简单 ... 我知道

丑陋的列名将输出推到右边:ctable(mtcars$gear,mtcars$really_long_variable_name_for_vs)

Cross-Tabulation,Row Proportions  
gear * really_long_variable_name_for_vs  
Data Frame: mtcars  

------- ---------------------------------- ------------ ------------ -------------
          really_long_variable_name_for_vs            0            1         Total
   gear                                                                           
      3                                      12 (80.0%)    3 (20.0%)   15 (100.0%)
      4                                       2 (16.7%)   10 (83.3%)   12 (100.0%)
      5                                       4 (80.0%)    1 (20.0%)    5 (100.0%)
  Total                                      18 (56.2%)   14 (43.8%)   32 (100.0%)
------- ---------------------------------- ------------ ------------ -------------

尝试像 table() 一样重命名不起作用。 ctable("gear"=mtcars$gear,"vs"=mtcars$really_long_variable_name_for_vs) 会产生以下错误

Error in ctable(gear = mtcars$gear,vs = mtcars$really_long_variable_name_for_vs) : argument "x" is missing,with no default

我了解给定 ctable() 参数要求时缺少“x”,但不了解如何重命名输出中的 x 和 y 名称summarytools 包小插曲 (here) 显示使用 freq() 和 print() 重新标记变量,但是当我为 ctable() 尝试几个版本时效果不佳:{{ 1}} 给出与上面相同的输出

我想要的输出是这样的:

print(ctable(x=mtcars$gear,y=mtcars$really_long_variable_name_for_vs),Variable.label=c("RowVar","ColVar"))

在这里错过了什么?提前致谢!

解决方法

使用dnn

library(summarytools)

ctable(mtcars$gear,mtcars$really_long_variable_name_for_vs,dnn = c('gear','vs'))

#Cross-Tabulation,Row Proportions  
#gear * vs  
#Data Frame: mtcars  

#------- ---- ------------ ------------ -------------
#          vs            0            1         Total
#   gear                                             
#      3        12 (80.0%)    3 (20.0%)   15 (100.0%)
#      4         2 (16.7%)   10 (83.3%)   12 (100.0%)
#      5         4 (80.0%)    1 (20.0%)    5 (100.0%)
#  Total        18 (56.2%)   14 (43.8%)   32 (100.0%)
#------- ---- ------------ ------------ -------------