如何将scales::percent或scales::percent_format()应用于R中的prop.table以将数字格式化为百分比

Jas*_*lns 2 formatting r crosstab percentage plyr

考虑以下示例:

tab <- table(mtcars$vs, mtcars$cyl, dnn = c("vs", "cylinder"))
prop.table(tab)
#    cylinder
# vs        4       6       8
#   0 0.03125 0.09375 0.43750
#   1 0.31250 0.12500 0.00000

round(prop.table(tab)*100, 1)
#    cylinder
# vs     4    6    8
#   0  3.1  9.4 43.8
#   1 31.2 12.5  0.0
Run Code Online (Sandbox Code Playgroud)

期望的输出:

#    cylinder
# vs      4     6     8
#   0  3.1%  9.4% 43.8%
#   1 31.2% 12.5%  0.0%
Run Code Online (Sandbox Code Playgroud)

scales::percent(round(prop.table(tab))) 不起作用,因为没有适用的方法应用于plyr::round_any()class 的对象table

我知道我缺少一个简单的解决方法。或者也许一个简单的包装器或拉取请求plyr::round_any()可以为每个人解决这个问题?

Nic*_*edy 5

pt <- percent(c(round(prop.table(tab), 3)))
dim(pt) <- dim(tab)
dimnames(pt) <- dimnames(tab)
Run Code Online (Sandbox Code Playgroud)

这应该有效。c此处使用其将表或矩阵转换为向量的属性。

替代使用sprintf

pt <- sprintf("%0.1f%%", prop.table(tab) * 100)
dim(pt) <- dim(tab)
dimnames(pt) <- dimnames(tab)
Run Code Online (Sandbox Code Playgroud)

如果您希望表格不带引号,那么您可以使用例如:

print(pt, quote = FALSE, right = TRUE)
Run Code Online (Sandbox Code Playgroud)

  • 这就是“print”输出字符向量和矩阵的方式。如上面添加的,如果需要,您可以仅使用“quote = FALSE”选项。 (2认同)