Kısa sürüm: formatC
veya kullanın sprintf
.
Daha uzun versiyon:
Sayıları biçimlendirmek için önde gelen sıfır eklenmesi de dahil olmak üzere çeşitli işlevler vardır. Hangisinin en iyisi, diğer biçimlendirmeyi yapmak istediğinize bağlıdır.
Sorudaki örnek oldukça kolaydır, çünkü tüm değerler başlamak için aynı sayıda basamağa sahiptir, bu yüzden 10 genişlik 8 güçlerini yapmak için daha zor bir örnek deneyelim.
anim <- 25499:25504
x <- 10 ^ (0:5)
paste
(ve varyantı paste0
) genellikle karşılaştığınız ilk dize düzenleme işlevleridir. Sayıları manipüle etmek için gerçekten tasarlanmamıştır, ancak bunun için kullanılabilirler. Her zaman tek bir sıfıra başlamamız gereken basit durumda paste0
en iyi çözümdür.
paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
Sayılarda değişken sayıda basamak olduğu durumda, kaç tane sıfırın başlayacağını manuel olarak hesaplamanız gerekir, bu da sadece morbid meraktan yapmanız gereken kadar korkunçtur.
str_pad
dan stringr
eser benzer üzere paste
size ped şeyler istediğini daha açık hale.
library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
Yine, gerçekten sayılarla kullanım için tasarlanmamıştır, bu yüzden zor durum biraz düşünmeyi gerektirir. Sadece "genişliği sıfır olan ped 8" diyebilmeliyiz, ancak şu çıktıya bakın:
str_pad(x, 8, pad = "0")
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "0001e+05"
Bilimsel ceza seçeneğini , sayıların her zaman sabit gösterim (bilimsel gösterim yerine) kullanılarak biçimlendirileceği şekilde ayarlamanız gerekir .
library(withr)
with_options(
c(scipen = 999),
str_pad(x, 8, pad = "0")
)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
stri_pad
içinde stringi
aynen gibi eserleri str_pad
arasından stringr
.
formatC
C fonksiyonuna bir arayüzdür printf
. Bunu kullanmak, altta yatan fonksiyonun arcana bilgisi gerektirir (bağlantıya bakınız). Bu durumda, önemli noktalardır width
, argüman format
olmaktan "d"
"tamsayı" ve a için"0"
flag
prepending sıfır için.
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"
Bu benim en sevdiğim çözümdür, çünkü genişliği değiştirmekle uğraşmak kolaydır ve işlev diğer biçimlendirme değişiklikleri yapmak için yeterince güçlüdür.
sprintf
aynı ismin C fonksiyonuna bir arayüzdür; gibi formatC
ama farklı bir sözdizimi ile.
sprintf("%06d", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
sprintf("%08d", x)
## [1] "00000001" "00000010" "00000100" "00001000" "00010000" "00100000"
Başlıca avantajı, sprintf
biçimlendirilmiş sayıları daha uzun metin bitlerine gömebilmenizdir.
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."
Ayrıca bkz . Goodside cevabı .
Tamlık için, zaman zaman yararlı olan, ancak sıfırları önleme yöntemi olmayan diğer biçimlendirme işlevlerinden bahsetmeye değer.
format
, sayılar için bir yöntemle her türlü nesneyi biçimlendirmek için kullanılan genel bir işlevdir. Biraz benzer formatC
, ancak başka bir arayüzle çalışıyor.
prettyNum
çoğunlukla manuel eksen onay etiketleri oluşturmak için başka bir biçimlendirme işlevidir. Geniş sayı aralıkları için özellikle iyi çalışır.
scales
Paket gibi çeşitli işlevlere sahiptir percent
, date_format
ve dollar
uzman biçim türleri için.
data$anim = paste(rep(0, n), data$anim, sep = "")