Appending % sign in output of prop.table

六月ゝ 毕业季﹏ 提交于 2019-12-01 02:33:33

问题


I'm trying to append % sign in the output of prop.table to use in Sweave. My attempted code is below:

m <- matrix(1:4,2)
dimnames(m) <- list(c("A", "B"), c("C", "D"))
prop.table(m,1)*100

         C        D
A 25.00000 75.00000
B 33.33333 66.66667


paste(round(prop.table(m,1)*100, 3), "%", sep = "")
[1] "25%"     "33.333%" "75%"     "66.667%"


paste(sprintf("%.1f", prop.table(m,1)*100), "%", sep = "")
[1] "25.0%" "33.3%" "75.0%" "66.7%"

Using paste will change the class from matrix to character. I'd highly appreciate if someone guide me the right solution. Thanks


回答1:


Most functions designed to work with vectors also accept matrices but return a vector instead of a matrix: paste, sprintf, etc. You can use apply, that will return a matrix.

apply( 
  prop.table(m,1)*100, 
  2, 
  function(u) sprintf( "%.1f%%", u ) 
)



回答2:


Another solution could be replacing content of matrix:

m2 <- m
m2[] <- sprintf("%.1f%%",round(prop.table(m,1)*100, 3))
m2
#   C       D      
# A "25.0%" "75.0%"
# B "33.3%" "66.7%"



回答3:


There's a package called janitor that takes care of the prop.table() "format-as-percentage" problem. Here's a link to the package: https://github.com/sfirke/janitor

Here's a usage example from the github page.

roster %>%
  tabyl(employee_status, full_time) %>%
  adorn_totals("row") %>%
  adorn_percentages("row") %>%
  adorn_pct_formatting() %>%
  adorn_ns() %>%
  adorn_title("combined")
#>  employee_status/full_time         No        Yes
#>             Administration   0.0% (0) 100.0% (1)
#>                      Coach 100.0% (2)   0.0% (0)
#>                    Teacher  33.3% (3)  66.7% (6)
#>                      Total  41.7% (5)  58.3% (7)


来源:https://stackoverflow.com/questions/9185745/appending-sign-in-output-of-prop-table

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!