在prop.table的输出中附加%符号

时间:2012-02-07 23:36:31

标签: r sweave

我正在尝试在prop.table的输出中附加%符号以在Sweave中使用。我的尝试代码如下:

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%"

使用paste会将类从矩阵更改为字符。如果有人指导我正确的解决方案,我将非常感激。感谢

4 个答案:

答案 0 :(得分:8)

另一种解决方案可能是替换矩阵的内容:

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%"

答案 1 :(得分:5)

设计用于向量的大多数函数也接受矩阵但返回向量而不是矩阵:pastesprintf等。 您可以使用apply,这将返回一个矩阵。

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

答案 2 :(得分:1)

有一个名为janitor的软件包可以解决prop.table()“格式百分比格式”问题。这是该软件包的链接:https://github.com/sfirke/janitor

这是github页面上的用法示例。

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)

答案 3 :(得分:0)

这是@VincentZoonekynd答案的扩展,增加了边距(行/列的总计)并删除了双引号:

library(magrittr)

m %>%
  prop.table %>%
  addmargins %>%
  apply(MARGIN=2, FUN=scales::percent, accuracy=0.1) %>%
  noquote

#>     C     D     Sum   
#> A   10.0% 30.0% 40.0% 
#> B   20.0% 40.0% 60.0% 
#> Sum 30.0% 70.0% 100.0%