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

例如,将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%"

Question:是否有一个基本的R函数来实现这一点?或者,是否有一个广泛使用的包提供了方便的包装?


尽管在?format?formatC?prettyNum中搜索了类似的东西,但我还没有在base R中找到合适的方便包装器.??"percent"没有产生任何有用的结果.library(sos); findFn("format percent")返回1250次点击,所以同样没有用.ggplot2有一个函数percent,但它不能控制舍入精度.

推荐答案

甚至后来:

正如@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"

几年后的更新:

如今,scales包中有一个percent函数,正如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".)

R相关问答推荐

确定邻国

如何替换某个字符的所有出现,但如果该字符是字符串中的第一个,则不替换?

在R中,如何创建时间间隔的图表?

使用na.locf在长格式数据集中输入具有多个时间点的数据集

保存shiny 的代码嗅探器:避免$ Symbol问题

在R中使用自定义函数时如何删除该函数的一部分?

无法在我的情节中表现出显着的差异

使用gggrassure减少地块之间的空间

如何自定义Shapviz图?

根据列A中的差异变异列,其中行由列B中的相对值标识

在不丢失空值的情况下取消列出嵌套列表

绘制采样开始和采样结束之间的事件

展开对数比例绘图的轴(添加填充)

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

如何创建累加到现有列累计和的新列?

从数据创建数字的命名列表.R中的框

如何计算增加10米(0.01公里)的行?

根据r中另一个文本列中给定的范围对各列求和

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹