作为 R 的新手,曾经让我感到困惑的一件事是如何将数字格式化为打印的百分比。
例如,显示0.12345为12.345%。我有很多解决方法,但这些似乎都不是“对新手友好的”。例如:
0.12345
12.345%
set.seed(1) m <- runif(5) paste(round(100*m, 2), "%", sep="") [1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%" sprintf("%1.2f%%", 100*m) [1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
问题: 是否有一个基本的 R 函数来执行此操作?或者,是否有一个广泛使用的包提供方便的包装器?
尽管在?format,?formatC和中搜索了类似的东西?prettyNum,但我还没有在基础 R 中找到合适的方便包装器。 ??"percent"没有产生任何有用的东西。 library(sos); findFn("format percent")返回 1250 次点击 - 所以再次没用。 ggplot2有一个功能percent,但这不能控制舍入精度。
?format
?formatC
?prettyNum
??"percent"
library(sos); findFn("format percent")
ggplot2
percent
甚至后来:
正如@DzimitryM 所指出的,percent()已经“退休”而支持label_percent(),这是旧percent_format()功能的同义词。
percent()
label_percent()
percent_format()
label_percent()返回一个函数,所以要使用它,你需要一对额外的括号。
library(scales) x <- c(-1, 0, 0.1, 0.555555, 1, 100) label_percent()(x) ## [1] "-100%" "0%" "10%" "56%" "100%" "10 000%"
通过在第一组括号内添加参数来自定义它。
label_percent(big.mark = ",", suffix = " percent")(x) ## [1] "-100 percent" "0 percent" "10 percent" ## [4] "56 percent" "100 percent" "10,000 percent"
几年后的更新:
这些天来,包中有一个percent功能scales,如 krlmlr 的回答中所述。使用它代替我的手动解决方案。
scales
尝试类似的东西
percent <- function(x, digits = 2, format = "f", ...) { paste0(formatC(100 * x, format = format, digits = digits, ...), "%") }
使用,例如,
x <- c(-1, 0, 0.1, 0.555555, 1, 100) percent(x)
(如果您愿意,请将格式从 更改"f"为"g"。)
"f"
"g"