百分数转化
00引言
在数据的处理中尤其是Rmarkdown的书写时往往需要输出百分数,可是R里核心函数里没有现成函数。本篇总结一下常用的做法。
1、思路
1、将原有的数字乘以100,在用paste
函数粘贴%
。
2、函数包的使用。
2、R实现
2.1自编函数
> # 加载核心包
> library(compiler)
> My_percnet <- function(x){
+ return(paste0(format(x*100,digits = 1),"%"))
+ }
> My_percnet <- cmpfun(My_percnet)
> My_percnet((1:5) / 100)
[1] "1%" "2%" "3%" "4%" "5%"
这部分自编了My_percnet
函数,实现了小数向量化转百分数。以下有两点说明:
1、函数体内digits
可以控制百分数的位数。
2、compiler
中的cmpfun
函数可以实现自编函数编码化,一定程度上提高自编函数的运算速度。
> My_percnet
function(x){
return(paste0(format(x*100,digits = 1),"%"))
}
<bytecode: 0x000000000c79cb30>
上面是自编函数的函数体,大家看有啥差别。有一行<bytecode: 0x000000000c79cb30>这是对函数进行编码化。
2.2调用包
2.2.1实现
> library('scales')
> percent((1:5) / 100)
[1] "1.0%" "2.0%" "3.0%" "4.0%" "5.0%"
我们看到这个scales
中的percent
函数也能完成这个任务,但是这个函数还有些参数。下面给大家介绍下用法。
function (x, accuracy = NULL, scale = 100, prefix = "",
suffix = "%", big.mark = " ", decimal.mark = ".",
trim = TRUE, ...)
{
number(x = x, accuracy = accuracy, scale = scale, prefix = prefix,
suffix = suffix, big.mark = big.mark, decimal.mark = decimal.mark,
trim = trim, ...)
}
2.2.2scale
这个参数可以设置为千分之一万分之一默认为100,百分之一。
> percent((1:5)/100,scale = 1000, suffix = "%")
[1] "10%" "20%" "30%" "40%" "50%"
2.2.3suffix
这个参数则是设置,后面的的符号。
> percent((1:5)/100,scale = 100, suffix = "#")
[1] "1.0#" "2.0#" "3.0#" "4.0#" "5.0#"
总结
相对来看自编函数可以实现,但是内置函数参数设置更加全面。有更好的想法的伙伴可以评论区指出。