小编典典

如何在R中将数字格式化为百分比?

all

作为 R 的新手,曾经让我感到困惑的一件事是如何将数字格式化为打印的百分比。

例如,显示0.1234512.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,但这不能控制舍入精度。


阅读 59

收藏
2022-08-15

共1个答案

小编典典

甚至后来:

正如@DzimitryM
所指出的,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 的回答中所述。使用它代替我的手动解决方案。


尝试类似的东西

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"。)

2022-08-15