如何使用 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

我理解";x〃;缺少给定的ctable((参数要求,但没有说明如何重命名输出中的x和y名称。summarytools包的渐晕(这里(显示了用freq((和print((重新标记变量,但当我尝试ctable((的几个版本时,效果不太好,比如print(ctable(x=mtcars$gear, y=mtcars$really_long_variable_name_for_vs), Variable.label=c("RowVar","ColVar")),它给出了与上面相同的输出。

我想要的输出是这样的:

Cross-Tabulation, Row Proportions  
gear * mtcars$really_long_variable_name_for_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%)
------- -- ----------- ------------ -------------

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

使用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%)
#------- ---- ------------ ------------ -------------

最新更新