Kısa sürüm: formatCveya 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 paste0en 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_paddan stringreser benzer üzere pastesize 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_padiçinde stringiaynen gibi eserleri str_padarasından stringr.
formatCC 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 formatolmaktan "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.
sprintfaynı ismin C fonksiyonuna bir arayüzdür; gibi formatCama 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ı, sprintfbiç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.
scalesPaket gibi çeşitli işlevlere sahiptir percent, date_formatve dollaruzman biçim türleri için.
data$anim = paste(rep(0, n), data$anim, sep = "")