Dark Mode On/Off
Not satisfied by the Answer? Still looking for a better solution?

# 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(100m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"

sprintf("%1.2f%%", 100m)
[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?
by

As pointed out by @DzimitryM, `percent()` has been "retired" in favor of `label_percent()`, which is a synonym for the old `percent_format()` function.

`label_percent()` returns a function, so to use it, you need an extra pair of parentheses.
```library(scales)
x <- c(-1, 0, 0.1, 0.555555, 1, 100)
label_percent()(x)
## [1] "-100%"   "0%"      "10%"     "56%"     "100%"    "10 000%"```

Customize this by adding arguments inside the first set of parentheses.

```label_percent(big.mark = ",", suffix = " percent")(x)
## [1] "-100 percent"   "0 percent"      "10 percent"
## [4] "56 percent"     "100 percent"    "10,000 percent"```

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)```
Check out the percent function from the formattable package:

```library(formattable)
x <- c(0.23, 0.95, 0.3)
percent(x)
[1] 23.00% 95.00% 30.00%```