mb1*_*b14 10 r number-formatting
是否有R函数(或任何包)允许使用标准单位前缀(Kilo,Mega等...)格式化数字(整数),所以
10 -> 10
100 -> 1K
0.01 - > 10m
Run Code Online (Sandbox Code Playgroud)
等等......我可以自己做,但我宁愿不重新发明轮子.
Rol*_*and 12
require(sitools)
f2si(80000)
[1] "80 k"
f2si(8E12)
[1] "8 T"
Run Code Online (Sandbox Code Playgroud)
它似乎非常简单,因为如果没有使用SI前缀,它会附加两个空格:
f2si(80)
[1] "80 "
Run Code Online (Sandbox Code Playgroud)
该功能易于修改,包括舍入.我还修复了附加空格的问题.
f2si2<-function (number,rounding=F)
{
lut <- c(1e-24, 1e-21, 1e-18, 1e-15, 1e-12, 1e-09, 1e-06,
0.001, 1, 1000, 1e+06, 1e+09, 1e+12, 1e+15, 1e+18, 1e+21,
1e+24)
pre <- c("y", "z", "a", "f", "p", "n", "u", "m", "", "k",
"M", "G", "T", "P", "E", "Z", "Y")
ix <- findInterval(number, lut)
if (lut[ix]!=1) {
if (rounding==T) {
sistring <- paste(round(number/lut[ix]), pre[ix])
}
else {
sistring <- paste(number/lut[ix], pre[ix])
}
}
else {
sistring <- as.character(number)
}
return(sistring)
}
f2si2(12345)
[1] "12.345 k"
f2si2(12345,T)
[1] "12 k"
Run Code Online (Sandbox Code Playgroud)
tom*_*gin 10
我带着同样的问题来到这里.感谢罗兰的回答; 我在他的代码上进行了一些改动:
希望这是有帮助的.
f2si<-function (number, rounding=F, digits=ifelse(rounding, NA, 6))
{
lut <- c(1e-24, 1e-21, 1e-18, 1e-15, 1e-12, 1e-09, 1e-06,
0.001, 1, 1000, 1e+06, 1e+09, 1e+12, 1e+15, 1e+18, 1e+21,
1e+24, 1e+27)
pre <- c("y", "z", "a", "f", "p", "n", "u", "m", "", "k",
"M", "G", "T", "P", "E", "Z", "Y", NA)
ix <- findInterval(number, lut)
if (ix>0 && ix<length(lut) && lut[ix]!=1) {
if (rounding==T && !is.numeric(digits)) {
sistring <- paste(round(number/lut[ix]), pre[ix])
}
else if (rounding == T || is.numeric(digits)) {
sistring <- paste(signif(number/lut[ix], digits), pre[ix])
}
else {
sistring <- paste(number/lut[ix], pre[ix])
}
}
else {
sistring <- as.character(number)
}
return(sistring)
}
f2si(12345)
[1] "12.345 k"
f2si(12345, T)
[1] "12 k"
f2si(10^31)
[1] "1e+31" # (previous version would output "1e+07 Y"
f2si(10^-25)
[1] "1e-25" # (previous version would throw error)
f2si(123456789)
[1] "123.457 M" # (previous version would output ""123.456789 M"
f2si(123456789, digits=4)
[1] "123.5 M" # (note .456 is rounded up to .5)
Run Code Online (Sandbox Code Playgroud)
从这段代码中,为常用的金融单位(K,MM,Bn,Tr)编写类似的函数也很容易.
归档时间: |
|
查看次数: |
2567 次 |
最近记录: |