Andrie - 1 year ago 186
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.

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"`.)

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download