을 사용하여 포맷 번호에 R 함수이므로부 프리픽스
10 -> 10
100 -> 1K
0.01 - > 10m
거기를 표준 단위 프리픽스를 사용하여 포맷 번호 있도록 R 함수 (또는 패키지) (정수) (킬로 메가 등)는
등 ... 나는 스스로 할 수 있지만 나는 바퀴를 재발 명하고 싶지 않다. 더 SI 접두어를 사용하지 않을 경우
을 사용하여 포맷 번호에 R 함수이므로부 프리픽스
10 -> 10
100 -> 1K
0.01 - > 10m
거기를 표준 단위 프리픽스를 사용하여 포맷 번호 있도록 R 함수 (또는 패키지) (정수) (킬로 메가 등)는
등 ... 나는 스스로 할 수 있지만 나는 바퀴를 재발 명하고 싶지 않다. 더 SI 접두어를 사용하지 않을 경우
require(sitools)
f2si(80000)
[1] "80 k"
f2si(8E12)
[1] "8 T"
는 두 개의 공백을 추가로 매우 단순한 것 같다 :
f2si(80)
[1] "80 "
함수는 라운딩을 포함하도록 쉽게 수정할 수 있습니다. 또한 첨부 된 공백으로 문제를 해결했습니다.
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"
나는 같은 질문으로 여기에왔다. 롤랜드에게 감사의 말을 전합니다.
호프 위 아래에 유용. 너무, 일반적으로 사용되는 금융 유닛 (K, MM, BN, TR)에 대한 유사한 기능을 작성하는 꽤 쉽게이 코드에서
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)
.
은 약간 음수을 고려하여 버전 수정 :
f2si<-function (number, rounding=F, digits=ifelse(rounding, NA, 6))
{
mysign <- ""
if (number<0) {
mysign <- "-"
}
number <- abs(number)
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(mysign,mysign,round(number/lut[ix]), pre[ix])
}
else if (rounding == T || is.numeric(digits)) {
sistring <- paste(mysign,signif(number/lut[ix], digits), pre[ix],sep="")
}
else {
sistring <- paste(mysign,number/lut[ix], pre[ix],sep="")
}
} else {
sistring <- paste(mysign,as.character(number),sep="")
}
return(sistring)
}
내가 천 (K), 만 (M)과 억 (B) 번호 계산기를 찾고 있었다. 필자는이 루틴을 숫자 벡터/단일 숫자가 필요한 출력을 뱉어 내도록 수정했습니다.
CurrencyFormat <-function (number,rounding=F)
{
first <- TRUE
lut <- c(1, 1000, 1000000, 1000000000,1000000000000)
pre <- c("", "K", "M", "B", "T")
if (length(number) > 1) {
for (cnt in 1:length(number)){
ix <- findInterval(number[cnt], lut)
if (ix != 0 | ix != 1){
if (rounding==T) {
sistring <- paste(round(number[cnt]/lut[ix]), pre[ix])
}
else {
sistring <- paste(signif(number[cnt]/lut[ix],digits=5), pre[ix])
}
if (first){
tnumber <- sistring
fnumber <- tnumber
first <- FALSE
}
else
fnumber <- append(fnumber, sistring)
}
else {
sistring <- number[cnt]
if (first){
tnumber <- sistring
fnumber <- tnumber
first <- FALSE
}
else
fnumber <- append(fnumber, sistring)
}
}
return(fnumber)
}
else{
ix <- findInterval(number, lut)
if (ix != 0 | ix != 1){
if (rounding==T) {
sistring <- paste(round(number/lut[ix]), pre[ix])
}
else {
sistring <- paste(signif(number/lut[ix],digits=5), pre[ix])
}
return(sistring)
}
else
return(number)
}
}
예 :
CurrencyFormat(1.25,F)
[1] "1.25 "
CurrencyFormat(1000.25,F)
[1] "1.0002 K"
CurrencyFormat(c(1,45,1234, 4.36e+06, 2.84e+04, 2.01e+06),F)
[1] "1 " "45 " "1.234 K" "4.36 M" "28.4 K" "2.01 M"
'유틸 ::: print.object_size' 일부 바이너리 단위 – James
위해 그것을 구현 난 그냥 교정하여 w/o이 일을주의 할 것이다. 예를 들어, 3.5Mm은 ISO에서 허용하지만 표준 사용에서는 모두 3.5e3km를 사용합니다. 무 차원 값에 접두어를 사용하지 않으므로 물리적 단위를 어떻게 추가 할 계획입니까? –
당신의 요점을 봅니다. 그러나 내가하고있는 일은 "심각하지"않으며 어떤 단위도 가지고 있지 않습니다. 난 그냥 음모/테이블에 가치를 표시하고 모든 3/4 문자를 맞게해야합니다. 10k는 1000 또는 1e + 03보다 더 작습니다. – mb14