Andrie Andrie - 2 months ago 11
R Question

How to format a number as percentage in R?

One of the things that used to perplex me as a newby to R was how to format a number as a percentage for printing.

For example, display

0.12345
as
12.345%
. I have a number of workarounds for this, but none of these seem to be "newby friendly". For example:

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


Question: Is there a base R function to do this? Alternatively, is there a widely used package that provides a convenient wrapper?




Despite searching for something like this in
?format
,
?formatC
and
?prettyNum
, I have yet to find a suitably convenient wrapper in base R.
??"percent"
didn't yield anything useful.
library(sos); findFn("format percent")
returns 1250 hits - so again not useful.
ggplot2
has a function
percent
but this gives no control over rounding accuracy.

Answer

An update, several years later:

These days there is a percent function in the scales package, as documented in krlmlr's answer. Use that instead of my hand-rolled solution.


Try something like

percent <- function(x, digits = 2, format = "f", ...) {
  paste0(formatC(100 * x, format = format, digits = digits, ...), "%")
}

With usage, e.g.,

x <- c(-1, 0, 0.1, 0.555555, 1, 100)
percent(x)

(If you prefer, change the format from "f" to "g".)

Comments