짧은 버전 : 사용 formatC
또는을sprintf
.
더 긴 버전 :
선행 0을 추가하는 것을 포함하여 숫자 서식을 지정할 수있는 몇 가지 기능이 있습니다. 어떤 형식이 가장 적합한 지 다른 형식에 따라 다릅니다.
모든 값은 같은 자릿수를 갖기 때문에 문제의 예는 매우 쉽습니다. 따라서 10 너비 8의 거듭 제곱을 만드는 더 어려운 예를 시도해 봅시다.
anim <- 25499:25504
x <- 10 ^ (0:5)
paste
(그리고 변형 paste0
)은 종종 당신이 처음 접하는 문자열 조작 함수입니다. 그것들은 실제로 숫자를 조작하기 위해 고안된 것은 아니지만 그것을 위해 사용될 수 있습니다. 우리가 항상 단일 0을 앞에 붙여야하는 간단한 경우에 paste0
가장 좋은 솔루션입니다.
paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
숫자에 가변 자릿수가있는 경우, 앞에 붙일 0의 수를 수동으로 계산해야합니다.
str_pad
from stringr
과 (와) 유사한 방식으로 작동 paste
하여 물건을 채우고 싶다는 것을 더욱 명확하게합니다.
library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
다시 말하지만, 실제로 숫자와 함께 사용하도록 설계되지 않았으므로 어려운 경우에는 약간의 생각이 필요합니다. "폭이 0 인 패드 8"이라고 말할 수 있어야하지만 다음 출력을보십시오.
str_pad(x, 8, pad = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "0001e+05"
과학적 페널티 옵션 을 설정하여 숫자가 항상 과학적 표기법이 아닌 고정 된 표기법을 사용하여 형식화되도록해야합니다.
library(withr)
with_options(
c(scipen = 999),
str_pad(x, 8, pad = "0")
)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
stri_pad
에서 stringi
정확히 같은 작품 str_pad
에서 stringr
.
formatC
C 함수에 대한 인터페이스 printf
입니다. 이를 사용하려면 해당 기본 기능의 arcana에 대한 지식이 필요합니다 (링크 참조). 이 경우 중요한 점은 "정수" 에 대한 width
논거이며format
"d"
"0"
flag
앞에 붙이는 제로합니다.
formatC(anim, width = 6, format = "d", flag = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
formatC(x, width = 8, format = "d", flag = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
너비를 변경하면 땜질하기 쉽고 다른 형식 변경을 수행 할 수있을만큼 강력하기 때문에이 솔루션은 제가 가장 좋아하는 솔루션입니다.
sprintf
동일한 이름의 C 함수에 대한 인터페이스입니다. 비슷 formatC
하지만 다른 구문으로.
sprintf("%06d", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
sprintf("%08d", x)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
가장 큰 장점은 sprintf
더 긴 텍스트 비트 안에 서식이 지정된 숫자를 포함시킬 수 있다는 것입니다.
sprintf(
"Animal ID %06d was a %s.",
anim,
sample(c("lion", "tiger"), length(anim), replace = TRUE)
)
## [1] "Animal ID 025499 was a tiger." "Animal ID 025500 was a tiger."
## [3] "Animal ID 025501 was a lion." "Animal ID 025502 was a tiger."
## [5] "Animal ID 025503 was a tiger." "Animal ID 025504 was a lion."
goodside의 답변 도 참조하십시오 .
완전성을 위해 때로는 유용하지만 0을 추가하는 방법이없는 다른 서식 기능을 언급 할 가치가 있습니다.
format
, 숫자에 대한 메소드를 사용하여 모든 종류의 오브젝트를 형식화하는 일반 함수입니다. 그것은 약간 비슷 formatC
하지만 또 다른 인터페이스와 함께 작동합니다 .
prettyNum
수동 축 눈금 레이블을 만들기위한 또 다른 서식 기능입니다. 특히 광범위한 숫자에 적합합니다.
이 scales
패키지에는 percent
, date_format
및 dollar
특수 형식 유형 과 같은 여러 기능이 있습니다.
data$anim = paste(rep(0, n), data$anim, sep = "")