संक्षिप्त संस्करण: उपयोग 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_padstringrइसी तरह से काम करता है 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।
formatCC फ़ंक्शन का इंटरफ़ेस है printf। इसका उपयोग करने के लिए उस अंतर्निहित फ़ंक्शन के आर्कन के कुछ ज्ञान की आवश्यकता होती है (लिंक देखें)। इस मामले में, महत्वपूर्ण बिंदुओं हैं widthतर्क, formatकिया जा रहा है "d"एक "पूर्णांक" के लिए, और "0" flagprepending शून्यों के लिए।
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 = "")