संक्षिप्त संस्करण: उपयोग formatC
या sprintf
।
अब संस्करण:
संख्याओं को स्वरूपित करने के लिए कई कार्य उपलब्ध हैं, जिनमें प्रमुख शून्य जोड़ना शामिल हैं। कौन सा सबसे अच्छा इस बात पर निर्भर करता है कि आप क्या करना चाहते हैं।
प्रश्न से उदाहरण काफी आसान है क्योंकि सभी मानों को अंकों की एक ही संख्या के साथ शुरू करना है, तो चलिए 10 चौड़ाई 8 की शक्तियां बनाने का कठिन उदाहरण आजमाते हैं।
anim <- 25499:25504
x <- 10 ^ (0:5)
paste
(और यह भिन्न है paste0
) अक्सर पहले स्ट्रिंग हेरफेर फ़ंक्शन होते हैं जो आप भर में आते हैं। वे वास्तव में संख्याओं में हेरफेर करने के लिए डिज़ाइन नहीं किए गए हैं, लेकिन उनका उपयोग इसके लिए किया जा सकता है। साधारण मामले में, जहां हमें हमेशा एक ही शून्य को रोकना होता paste0
है, सबसे अच्छा समाधान है।
paste0("0", anim)
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
उस मामले के लिए जहां अंकों में एक चर संख्या होती है, आपको मैन्युअल रूप से गणना करने के लिए कितने शून्य की गणना करनी होगी, जो कि इतनी भयानक है कि आपको केवल रुग्ण जिज्ञासा से बाहर करना चाहिए।
str_pad
stringr
इसी तरह से काम करता है paste
, जिससे यह स्पष्ट हो जाता है कि आप चीजों को पैड करना चाहते हैं।
library(stringr)
str_pad(anim, 6, pad = "0")
## [1] "025499" "025500" "025501" "025502" "025503" "025504"
फिर, यह वास्तव में संख्याओं के साथ उपयोग के लिए डिज़ाइन नहीं किया गया है, इसलिए कठिन मामले के बारे में थोड़ा सोचने की आवश्यकता है। हमें केवल "जीरो के साथ पैड की चौड़ाई 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
। इसका उपयोग करने के लिए उस अंतर्निहित फ़ंक्शन के आर्कन के कुछ ज्ञान की आवश्यकता होती है (लिंक देखें)। इस मामले में, महत्वपूर्ण बिंदुओं हैं width
तर्क, format
किया जा रहा है "d"
एक "पूर्णांक" के लिए, और "0"
flag
prepending शून्यों के लिए।
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."
अच्छा जवाब भी देखिए ।
पूर्णता के लिए यह अन्य स्वरूपण कार्यों का उल्लेख करने के लायक है जो कभी-कभी उपयोगी होते हैं, लेकिन ज़ीरो को प्रस्तुत करने का कोई तरीका नहीं है।
format
, संख्याओं के लिए एक विधि के साथ किसी भी प्रकार की वस्तु को प्रारूपित करने के लिए एक सामान्य कार्य। यह थोड़ा सा काम करता है formatC
, लेकिन अभी तक एक और इंटरफ़ेस के साथ।
prettyNum
अभी तक एक और स्वरूपण समारोह है, ज्यादातर मैनुअल अक्ष टिक लेबल बनाने के लिए। यह विशेष रूप से संख्याओं की विस्तृत श्रृंखला के लिए काम करता है।
scales
पैकेज जैसे कई कार्य करता है percent
, date_format
और dollar
विशेषज्ञ प्रारूप प्रकार के लिए।
data$anim = paste(rep(0, n), data$anim, sep = "")