如何使用 R 的 summarytools 包中的 ctable 重命名行和列变量名称输出?
How do I rename row & column variable name output using ctable from R's summarytools package?
我非常喜欢 R 的简单函数,例如 table() 用于快速查看双变量 tables,但是当我想要同一输出中的频率和百分比时,我使用 ctable() 来自 summarytools 包。
有时我的变量名很长,这对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 package vignettes (here) 显示了用 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%)
#------- ---- ------------ ------------ -------------
我非常喜欢 R 的简单函数,例如 table() 用于快速查看双变量 tables,但是当我想要同一输出中的频率和百分比时,我使用 ctable() 来自 summarytools 包。
有时我的变量名很长,这对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 package vignettes (here) 显示了用 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%)
#------- ---- ------------ ------------ -------------