我正在尝试在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
会将类从矩阵更改为字符。如果有人指导我正确的解决方案,我将非常感激。感谢
答案 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)
设计用于向量的大多数函数也接受矩阵但返回向量而不是矩阵:paste
,sprintf
等。
您可以使用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%