2015-06-12 75 views
0

考虑下面的例子:如何申请鳞::百分比或秤:: percent_format()中的R到prop.table格式化数字为百分比

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 

希望的输出:

# cylinder 
# vs  4  6  8 
# 0 3.1% 9.4% 43.8% 
# 1 31.2% 12.5% 0.0% 

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

我知道我错过了一个简单的解决方法。或者,对plyr::round_any()的简单包装或拉请求可以解决这个问题吗?

+0

'd < - 圆(prop.table(标签)* 100,1)'和'粘贴(d,“%”,sep =“”)'? – rmuc8

+0

@ rmuc8没有。这将输出一个向量。 – JasonAizkalns

+0

'x < - paste(d,“%”,sep =“”)' '矩阵(x,nrow = 2,ncol = 3)' – rmuc8

回答

4
pt <- percent(c(round(prop.table(tab), 3))) 
dim(pt) <- dim(tab) 
dimnames(pt) <- dimnames(tab) 

这应该有效。这里使用的是其将表格或矩阵转换为矢量的属性。

替代使用sprintf

pt <- sprintf("%0.1f%%", prop.table(tab) * 100) 
dim(pt) <- dim(tab) 
dimnames(pt) <- dimnames(tab) 

如果你想不带引号写表,那么你可以使用例如:

print(pt, quote = FALSE, right = TRUE) 
+0

关闭,但周围有引号。 – JasonAizkalns

+2

这就是'print'输出字符向量和矩阵的方式。如上所述,如果需要,您可以使用'quote = FALSE'选项。 –

+0

最后一步,右对齐输出并对齐小数。 – JasonAizkalns

1
prop <- round(prop.table(tab)*100, 1) 
x <- paste(prop, "%", sep="") 
print(matrix(x, nrow = 2, ncol = 3), quote = FALSE) 

#  [,1] [,2] [,3] 
# [1,] 3.1% 9.4% 43.8% 
# [2,] 31.2% 12.5% 0% 
+0

右对齐输出和对齐小数怎么样? – JasonAizkalns

+0

只需加上'right = TRUE'。你可以在几分钟内找到它 – rmuc8